我实现了视图的水平(分页)幻灯片放映,创建了单独的xib并与视图控制器集成。幻灯片放映按预期工作,但我希望为每个视图添加操作,以便从那里我可以直接移动到相应的主要内容页面。找到以下用于实现幻灯片放映的代码。
func createSlides() -> [Slide] {
let slide1:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide
slide1.labelTitle.text = "Page1"
let slide2:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide
slide2.labelTitle.text = "Page2"
return [slide1, slide2]
滑动功能
func setupSlideScrollView(slides : [Slide]) {
scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height)
scrollView.isPagingEnabled = true
for i in 0 ..< slides.count {
slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
scrollView.addSubview(slides[i])
}
}
Xib文件
class Slide:UIView {
@IBOutlet weak var labelTitle: UILabel!
var onClickCallback: (() -> Void)?
override init (frame : CGRect) {
super.init(frame : frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
如果我认为你的要求是正确的,那么就这样做吧。 (顺便说一句,我对此有点生疏,所以如果我错了请不要把我钉在十字架上)。另外我不知道你在哪里设计这个,所以我假设它与main.viewcontroller不同。如果不只是添加一个按钮并为内容页面创建一个segue。
self.performSegue(withIdentifier: test, sender: self)
希望我帮忙,托比。
此外,如果这不起作用,不是你想要实现或措辞不好请评论它是什么,我会尝试解决它。
调用此函数并将pageIndex传递到要跳转的位置:
func jumpToView(_ index : Int) {
let offset = CGPoint(x: view.frame.width * CGFloat(index), y: 0)
scrollView.setContentOffset(offset, animated: true)
}
希望这是你正在寻找的。
函数let offset = CGPoint(x: view.frame.width * CGFloat(index), y: 0)
中的第一行,用于计算要在scrollview中移动的位置。例如:对于第一个xib位置将是CGPoint(x:0,y:0),对于第三个xib,位置将是CGPoint(x:200,y:0),考虑每个xib宽度为100
setContentOffset
用于在特定位置/点滚动。
有关更多信息,请查看Link