我实现了视图的水平(分页)幻灯片放映,创建了单独的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文件
类别幻灯片: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)!
}
答案 0 :(得分:1)
如果我认为您的要求是正确的,请执行此操作。 (顺便说一句,我对此有些生疏,所以如果我错了,请不要把我钉在十字架上)。我也不知道您在哪里设计这个,所以我假设它与main.viewcontroller不在同一个地方。如果不是,只需添加一个按钮并在内容页面上创建一个segue。
self.performSegue(withIdentifier: test, sender: self)
希望我能帮上忙,托比。
如果这行不通,不是您想要达到的目的或措辞不佳,请评论一下它是什么,我将尝试修复它。
答案 1 :(得分:0)
调用此函数,并在要跳转的位置传递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)
中的第一行,用于计算要在滚动视图中移动的位置。例如:对于第一个xib位置将为CGPoint(x:0,y:0),对于第3个xib,位置将为CGPoint(x:200,y:0),请考虑每个xib宽度为100
setContentOffset
用于在特定位置/点滚动。
有关更多信息,请检查Link