我目前正在学习swift,我有一个项目,我必须使用滚动视图显示三个图像,但问题是当我滚动三个图像时,滚动视图继续进行我怎么才能滚动那边的图像。 这是我的代码
import UIKit
class ViewController: UIViewController {
var images = [UIImageView]()
var contentWidth: CGFloat = 0.0
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
for x in 0...2 {
let image = UIImage(named: "icon\(x).png")
let imageView = UIImageView(image: image)
images.append(imageView)
var newX: CGFloat = 0.0
newX = view.frame.midX + view.frame.size.width * CGFloat(x)
contentWidth += newX
scrollView.addSubview(imageView)
imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)
}
scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)
}
}
这里看起来如何 -
第一个图像项目 -
第二个图像项目 -
第三个图像项目 -
不应出现的第四项 -
答案 0 :(得分:0)
您的代码有几个问题:
调用view
时未正确确定viewDidLoad()
的大小。将代码移至override
viewDidLayoutSubviews
,以确保您拥有正确的视图大小。但请注意,该例程将被多次调用,因此如果您已添加内容以阻止设置{Boolean
,请使用contentAdded
(名称为scrollView
)来跟踪{1}}不止一次。
您正在以错误的金额递增contentWidth
。每次循环时,您只希望contentWidth
的宽度扩展view
。
以下是更新后的代码:
var contentAdded = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if !contentAdded {
contentAdded = true
for x in 0...2 {
let image = UIImage(named: "icon\(x).png")
let imageView = UIImageView(image: image)
images.append(imageView)
var newX: CGFloat = 0.0
newX = view.frame.midX + view.frame.size.width * CGFloat(x)
contentWidth += view.frame.size.width
scrollView.addSubview(imageView)
imageView.frame = CGRect(x: newX - 75, y: (view.frame.size.height / 2) - 75, width: 150, height: 150)
}
scrollView.contentSize = CGSize(width: contentWidth, height: view.frame.size.height)
}
}
注意:您假设scrollView
与width
具有相同的height
和view
,但这可能并非总是如此如果您以不同方式布局屏幕的情况。使用scrollView.bounds
代替view.frame
更为正确,这样即使您的scrollView
小于屏幕,也可以获得预期的结果。