当前页面的UIPageControl点大小[重复]
Posted
技术标签:
【中文标题】当前页面的UIPageControl点大小[重复]【英文标题】:UIPageControl Dot Size for current page [duplicate] 【发布时间】:2018-07-12 10:49:26 【问题描述】:我正在尝试找出如何使所选页面的点比其他页面稍大,如下所示:
第 1 页:
第 2 页:
我可以更改所有点、背景等的点颜色、大小,但不能更改当前页面的特定点。如何仅更改当前页面的点大小?
这可以是 Swift 或 Objective-C。
【问题讨论】:
是的,我希望有一种方法可以让默认控件处理这种行为。如有必要,我可以创建自己的自定义 UIPagerControl,但并不理想。 仅凭我的投票不足以让您重新提出问题,但您在Scaling current dot of UIPageControl and keeping it centered得到了一个可行的解决方案 【参考方案1】:斯威夫特
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
let x = targetContentOffset.pointee.x
pageControl.currentPage = Int(x / self.frame.width)
// on each dot, call the transform of scale 1 to restore the scale of previously selected dot
pageControl.subviews.forEach
$0.transform = CGAffineTransform(scaleX: 1, y: 1)
// transform the scale of the current subview dot, adjust the scale as required, but bigger the scale value, the downward the dots goes from its centre.
// You can adjust the centre anchor of the selected dot to keep it in place approximately.
let centreBeforeScaling = self.pageControl.subviews[self.pageControl.currentPage].center
self.pageControl.subviews[self.pageControl.currentPage].transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
// Reposition using autolayout
self.pageControl.subviews[self.pageControl.currentPage].translatesAutoresizingMaskIntoConstraints = false
self.pageControl.subviews[self.pageControl.currentPage].centerYAnchor.constraint(equalTo: self.pageControl.subviews[0].centerYAnchor , constant: 0)
self.pageControl.subviews[self.pageControl.currentPage].centerXAnchor.constraint(equalTo: self.pageControl.subviews[0].centerXAnchor , constant: 0)
// self.pageControl.subviews[self.pageControl.currentPage].layer.anchorPoint = centreBeforeScaling
【讨论】:
啊,我明白了,是的,我会试试这个。谢谢你的建议!! 这会覆盖我的 UIPageViewController 中的 scrollViewWillEndDragging 吗? 在设置 pagecontrol.currentPage 之后放置这段代码 pageControl.subviews.forEach $0.transform = CGAffineTransform(scaleX: 1, y: 1) self.pageControl.subviews[self.pageControl .currentPage].transform = CGAffineTransform(scaleX: 1.25, y: 1.25) 通过在 viewDidAppear() 中执行该代码解决了最后一个问题,非常感谢,这对我们来说是一个完美的解决方案!!!我将这些调用封装到我们从 viewDidAppear 调用的函数中,并在我们更改页面时调用。 是的,您应该在子视图布局后调用它。很高兴我能帮上忙。【参考方案2】:默认的 UIPageControl 实现不允许您更改点的外观。 幸运的是,有很多开源替代品,例如:
FXPageControl: 尼克·洛克伍德 CHIPageControl: 由 ChiliLabs您可以浏览Github search 以找到最适合您的需求。
【讨论】:
是的,大多数人做的比我们真正需要的要多得多。我们可以做我们自己的自定义 UIPageControl,我只是希望有一个简单的解决方案。我会考虑你的建议,但我相信他们做的比我们需要的要多。感谢您的建议。以上是关于当前页面的UIPageControl点大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何以不同的方式设置 UIPageControl 的当前页面指示点的样式?
在 UIPageViewController 的 UIPageControl 中增加指示器的大小