如何在 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 包含两个较小的视图:mapView
和 imageView
一个在另一个之上:
我想改变它,所以当用户打开这个视图控制器时,他会看到地图和下面的虚线元素,就像这样:
但它应该只引用页面上的这两个元素 - 当用户来回滑动时,其余元素应该保持不变。
我看到一些教程将这些点放在屏幕的最底部,然后整个屏幕都可以滚动,但它是否只能通过页面上的选定组件来实现?
【问题讨论】:
【参考方案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】:尝试使用UIScrollView
和pagingEnabled
进行滚动,使用UIPageControl
显示您引用的“虚线元素”。
【讨论】:
好的,我放了uiscrollview
并将地图放入其中,但是如何添加第二个元素(uiimageview
)并将其与uiPageControl
连接?
你必须实现UIScrollViewDelegate
,它有一些函数会通知你scrollViewOffset是否改变或者如果它被分页,它的页面改变了,并且在改变时,设置UIPageControl的当前页面。以上是关于如何在 Swift 中制作放置在 UIViewController 中的水平可滚动组件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swift 填充我放置在 UITableCell 中的整个 UIScrollView