如何在 Swift 中制作放置在 UIViewController 中的水平可滚动组件?

Posted

技术标签:

【中文标题】如何在 Swift 中制作放置在 UIViewController 中的水平可滚动组件?【英文标题】:How can I make a horizontally scrollable component that is placed in my UIViewController in Swift? 【发布时间】:2016-02-24 20:04:25 【问题描述】:

我有一个 UIViewController 包含两个较小的视图:mapViewimageView 一个在另一个之上:

我想改变它,所以当用户打开这个视图控制器时,他会看到地图和下面的虚线元素,就像这样:

但它应该只引用页面上的这两个元素 - 当用户来回滑动时,其余元素应该保持不变。

我看到一些教程将这些点放在屏幕的最底部,然后整个屏幕都可以滚动,但它是否只能通过页面上的选定组件来实现?

【问题讨论】:

【参考方案1】:

按照上面的建议使用启用分页的滚动视图 -

你的类应该是 UIScrollViewDelegate 的子类 您将需要滚动视图的 IBOutlet。 (比如滚动)

在你看来DidLoad -

//First set frame and content size for scroll view.
scroll.frame = CGRectMake(0, 0, self.view.frame.width, 120)
scroll.delegate = self
scroll.contentSize = CGSizeMake(self.view.frame.width * 2, 120)

//Then create your imageView and mapView and add them to the scroll view.
let imgView = UIImageView(frame: CGRectMake(0, 0, scroll.frame.width, 100))
//Do whatever changes you want in the imgView
scroll.addSubview(imgView)

let viewForMap = UIMapView(frame: CGRectMake(scroll.frame.width, 0, scroll.frame.width, 100))
//Do whatever changes you want in the viewForMap
scroll.addSubview(viewForMap)

var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(self.view.center.x - 20, 100, 40, 20))
pageControl.numberOfPages = n //2 in your case
pageControl.currentPage = 0  //For initial page
pageControl.pageIndicatorTintColor = UIColor.grayColor()
pageControl.currentPageIndicatorTintColor = UIColor.whiteColor()
view.addSubview(pageControl)

为了在页面控件上显示当前页面指示器,您需要 -

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

如果您按照上述内容进行任何适合您的更改,您就可以开发您想要的东西。 希望这会有所帮助。

【讨论】:

【参考方案2】:

尝试使用UIScrollViewpagingEnabled 进行滚动,使用UIPageControl 显示您引用的“虚线元素”。

【讨论】:

好的,我放了uiscrollview并将地图放入其中,但是如何添加第二个元素(uiimageview)并将其与uiPageControl连接? 你必须实现UIScrollViewDelegate,它有一些函数会通知你scrollViewOffset是否改变或者如果它被分页,它的页面改变了,并且在改变时,设置UIPageControl的当前页面。

以上是关于如何在 Swift 中制作放置在 UIViewController 中的水平可滚动组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 填充我放置在 UITableCell 中的整个 UIScrollView

UICollectionView 不显示 - 错误?

如何在 Swift 3 中正确放置背景音乐?

Swift 5 Xcode 10.3 如何设置背景透明

如何使用 AutoLayout 制作均匀分布的图像行? [复制]

在swift 2中改变球类型的颜色