当前页面的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 的当前页面指示点的样式?

Swift UIPageControl 不显示点

在 UIPageViewController 的 UIPageControl 中增加指示器的大小

在 UIPageViewController 的 UIPageControl 中增加指示器的大小

UIPageControl

如何更改 UIPageControl 点 [重复]