UISwipeGestureRecognizer配合UIPageControl实现图片滑动切换不生效问题
UIPageControl搭配滑动手势切换图片功能修复
现有代码的问题汇总
UIPageControl缺少基础配置:未设置numberOfPages与图片数组长度匹配,也未设置初始currentPage,页面加载时没有给图片控件设置默认显示的第一张图- 左滑边界逻辑错误:当处于最后一张图继续左滑时,原代码执行
pageCtl.currentPage = swipePosition + 1会导致页码超出数组合法范围,且没有同步更新正确的页码 - 滑动切换图片后未同步更新
pageCtl.currentPage,导致页码指示器和当前展示的图片不对应 - 若
imageNames定义在viewDidLoad内部为局部变量,swiped方法无法访问该数组,会引发运行时崩溃
修正后的完整实现代码
// 全局属性定义 var swipePosition = 0 @IBOutlet weak var pageCtl: UIPageControl! @IBOutlet weak var imageView: UIImageView! // 图片数组设为全局属性 let imageNames = ["cauliflower", "grapres", "Image", "lily", "mango"] override func viewDidLoad() { super.viewDidLoad() // 配置PageControl基础参数 pageCtl.numberOfPages = imageNames.count pageCtl.currentPage = 0 // 设置初始展示的第一张图 imageView.image = UIImage(named: imageNames[swipePosition]) // 添加滑动手势 let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiped)) swipeRight.direction = .right self.view.addGestureRecognizer(swipeRight) let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped)) swipeLeft.direction = .left self.view.addGestureRecognizer(swipeLeft) } @objc func swiped(gesture: UIGestureRecognizer) { guard let swipeGesture = gesture as? UISwipeGestureRecognizer else { return } switch swipeGesture.direction { case .left: if swipePosition == imageNames.count - 1 { // 最后一张左滑回到第一张 swipePosition = 0 } else { swipePosition += 1 } case .right: if swipePosition == 0 { // 第一张右滑跳到最后一张 swipePosition = imageNames.count - 1 } else { swipePosition -= 1 } default: break } // 同步更新图片和页码指示器 imageView.image = UIImage(named: imageNames[swipePosition]) pageCtl.currentPage = swipePosition }
内容的提问来源于stack exchange,提问作者AMIT KUMAR JHAMB
相关产品推荐
相关产品推荐

