ios - UIScrollView 启用分页滑动问题

标签 ios swift uiscrollview

我有一个启用了分页的 UIScrollView。一切正常,但有时当我滚动到下一张图片时,仍会显示距离上一张图片 1 个像素。

enter image description here

正如您在图像的最左侧看到的那样,有 1 个像素的垂直线来自它之前的图像。这意味着图像没有完全滑动。

我试了很多都找不到问题。

这是我的代码:

import Foundation
import UIKit
import SwiftyGif

class MBSPagingScrollView: UIScrollView, UIScrollViewDelegate {

var scrollView = UIScrollView()
var pageControl = UIPageControl()
var imagesArray = [String]()

override init (frame : CGRect) {
    super.init(frame : frame)
}

convenience init () {
    self.init(frame:CGRect.zero)
}

required init(coder aDecoder: NSCoder) {
    fatalError("This class does not support NSCoding")
}

init(frame : CGRect, imagesarray : [String]){
    super.init(frame : frame)

    imagesArray = imagesarray

    scrollView.delegate = self
    scrollView.isPagingEnabled = true
    scrollView.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height)
    scrollView.showsHorizontalScrollIndicator = false
    self.addSubview(scrollView)

    pageControl.frame = CGRect(x: 0, y: self.frame.size.height - 50, width: self.frame.size.width, height: 50)
    pageControl.numberOfPages = imagesArray.count
    pageControl.currentPage = 0
    pageControl.tintColor = UIColor.red
    pageControl.pageIndicatorTintColor = UIColor.black
    pageControl.currentPageIndicatorTintColor = MainOrangeColor
    self.addSubview(pageControl)

    scrollView.contentSize = CGSize(width:scrollView.frame.size.width * CGFloat(imagesArray.count),height: scrollView.frame.size.height)
    pageControl.addTarget(self, action: #selector(changePage(sender:)), for: UIControlEvents.valueChanged)

    for (index, imageName) in imagesArray.enumerated() {

        var imageView = UIImageView()

        if imageName.hasSuffix(".gif") {
            let gifManager = SwiftyGifManager(memoryLimit:30)
            let gif = UIImage(gifName: imageName)
            imageView = UIImageView(gifImage: gif, manager: gifManager)
        }

        else {
            imageView = UIImageView(image: UIImage(named: imageName))
            imageView.contentMode = UIViewContentMode.scaleToFill
        }

        imageView.frame = CGRect(x: CGFloat(index) * self.frame.size.width, y: 0, width: self.frame.size.width, height: self.frame.size.height)
        scrollView.addSubview(imageView)
    }

}

func changePage(sender: AnyObject) -> () {
    let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width
    scrollView.setContentOffset(CGPoint(x:x, y:0), animated: true)
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    pageControl.currentPage = Int(pageNumber)
}

}

非常感谢任何帮助。 非常感谢!

最佳答案

尝试为所有 ImageView 设置 clipsToBounds = true

关于ios - UIScrollView 启用分页滑动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766141/

相关文章:

ios - Xcode 记录 UI 测试 - 如何删除 XCTestCase 自动生成的代码下拉菜单

ios - 将 Google Drive API 桥接到 Swift

swift - 使用 Swift 从不同的类访问 SKCameraNode

ios - 使用 NSNotificationCenter 时 ARC 无法正常工作

ios - subview 超出屏幕范围 iOS(自动布局)

iphone - 当 UITextField 位于 UIScrollView 内时,使用点击手势关闭键盘时出现问题。

ios - UIView 的子类没有 view 属性

iphone - 如何将此类数据显示到 UITableview

ios - 单选按钮不会通过选择而改变

iOS View 不会在方向更改时更改方向