自定義了一個banner類。完全憑藉OC的感覺寫的。話不多說,直接上代碼
//
// LHWhellPlantImage.swift
// safari
//
// Created by 磊懷王 on 2019/12/2.
// Copyright © 2019 磊懷王. All rights reserved.
//
import UIKit
class LHWhellPlantImage: NSObject,UIScrollViewDelegate {
override init() {
super.init()
}
/// 輪播圖的實現類
/// - Parameters:
/// - imageArr: 原始圖片數組 即圖片的名字
/// - superView: 所要加載的父視圖
/// - rect: 輪播圖的位置
func initWhellPantImage(_ imageArr : Array<String>,_ superView : UIView,_ rect : CGRect) -> Void {
let imageScro : UIScrollView = UIScrollView.init()
imageScro.frame = rect
imageScro.backgroundColor = UIColor.black
superView.addSubview(imageScro)
let scroW = imageScro.frame.size.width
let scroH = imageScro.frame.size.height
var newImageArr : Array<String> = Array.init()
newImageArr += imageArr
newImageArr.insert(imageArr.last!, at: 0)
newImageArr.insert(imageArr.first!, at: newImageArr.count)
for tempImage in newImageArr.enumerated() {
print(tempImage)
let imageR : CGRect = CGRect.init(x: scroW * CGFloat(tempImage.offset), y: 0, width: scroW, height: scroH)
let imageV = UIImageView.init(frame: imageR)
imageV.image = UIImage.init(named: tempImage.element)
imageScro.addSubview(imageV)
// 添加點擊事件
let tap = UITapGestureRecognizer.init(target: self, action: #selector(touchWhellImage(_:)))
imageV.addGestureRecognizer(tap)
imageV.isUserInteractionEnabled = true
imageV.tag = 100 + tempImage.offset
}
imageScro.contentSize = CGSize.init(width: scroW * CGFloat(newImageArr.count), height: scroH)
imageScro.contentOffset = CGPoint.init(x: scroW, y: 0);
imageScro.isUserInteractionEnabled = true
imageScro.isPagingEnabled = true
imageScro.delegate = self
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let scroW = scrollView.frame.size.width
let pageAll = scrollView.contentSize.width / scroW
let page = scrollView.contentOffset.x / scroW
if page == 0 {
scrollView.contentOffset = CGPoint.init(x: scroW * CGFloat(pageAll - 2), y: 0)
}else if page == (pageAll - 1){
scrollView.contentOffset = CGPoint.init(x: scroW, y: 0)
}
}
@objc func touchWhellImage(_ ges : UITapGestureRecognizer) -> Void {
print("點擊了第\(ges.view!.tag - 100)張圖片")
}
}
效果圖如下:
調用方法
let whell : LHWhellPlantImage = LHWhellPlantImage.init() //需要聲明爲全局變量
func bannerScroller() -> Void {
let imageArr : Array = ["scroll001","scroll002","scroll003","scroll004","scroll005","scroll006","scroll007","scroll008","scroll009"]
let rect : CGRect = CGRect.init(x: 10, y: 200, width: UIScreen.main.bounds.size.width - 20, height: 100)
whell.initWhellPantImage(imageArr, self.view, rect)
}
下篇微博 我將加上 自定義的輪播圖的指示器,請繼續關注