UIPageControl - 如何使背景透明?

时间:2014-01-08 21:57:10

标签: ios objective-c uipagecontrol

我正在使用UIPageControl并尝试使背景透明。

UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor blackColor];

有什么建议吗?

尝试

pageControl.backgroundColor = [UIColor clearColor];

没有运气。

============

好的,正如 @ powerj1984 @daniellarsson UIPageControl所提到的,在位置和背景颜色方面似乎无法改变。

所以我决定把它移到UIViewController并创建一个UIPageControl

@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

然后将其与UIPageViewController

中的viewDidLoad一样
self.pageControl.numberOfPages = self.pageTitles.count;    
[self.view addSubview:_pageControl.viewForBaselineLayout]; 

然后我更新了UIPageControlviewControllerBeforeViewController

viewControllerAfterViewController的索引
NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; 
self.pageControl.currentPage = index;

7 个答案:

答案 0 :(得分:8)

好的,正如@ powerj1984和@daniellarsson所提到的,UIPageControl在位置和背景颜色方面似乎无法改变。

所以我决定将它移到UIViewController并创建一个UIPageControl和

@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

然后将其置于我的UIPageViewController顶部,如viewDidLoad

self.pageControl.numberOfPages = self.pageTitles.count;    
[self.view addSubview:_pageControl.viewForBaselineLayout]; 

然后我在viewControllerBeforeViewController和viewControllerAfterViewController中更新了UIPageControl的索引

NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; 
self.pageControl.currentPage = index;

答案 1 :(得分:5)

pageControl.backgroundColor = [UIColor clearColor];

正在工作但是!!你必须在backgroundColor上设置UIPageViewController的{​​{1}}而不是!你会看到容器视图的背景颜色。

[UIColor clearColor]

答案 2 :(得分:4)

页面控制默认是透明的。

请查看此示例代码:

UIPageControl *pageControl = [[UIPageControl alloc] init];
pageControl.frame = CGRectMake(10,10,100,100);
pageControl.numberOfPages = 8;
pageControl.currentPage = 0;
[self.view addSubview:pageControl];
[self.view bringSubviewToFront:pageControl];
[self.view setBackgroundColor:[UIColor blackColor]];

请在下面找到更多自定义功能

页面控件的外观

您可以通过设置下面描述的属性来自定义页面控件的外观。

enter image description here

要自定义应用中所有页面控件的外观,请使用外观代理(例如,[UIPageControl外观])。有关外观代理的更多信息,请see Appearance Proxies

色调

自定义页面控件外观的唯一方法是为表示每个页面的点设置自定义色调。当前页面(currentPageIndicatorTintColor)字段影响表示当前显示页面的点的颜色,并且色调颜色(pageIndicatorTintColor)字段影响表示每个其他页面的点的颜色。当前页面点的默认颜色为白色,其他页面点的默认颜色为半透明灰色。

enter image description here

如果您希望自定义颜色是半透明的,则必须指定alpha值小于1.0的颜色。这必须以编程方式完成,如下例所示:

self.myPageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5];
self.myPageControl.pageIndicatorTintColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5];

UIPageControl - Developer.Apple documentation

中查看更多详情

答案 3 :(得分:1)

我终于在Swift中找到了解决这个问题的工作方案。您可以在此link找到原始代码和答案。

它要求您覆盖viewDidLayoutSubviews()函数以将页面控件置于视图的前面。

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let subViews: NSArray = view.subviews
        var scrollView: UIScrollView? = nil
        var pageControl: UIPageControl? = nil

        for view in subViews {
            if view.isKindOfClass(UIScrollView) {
                scrollView = view as? UIScrollView
            }
            else if view.isKindOfClass(UIPageControl) {
                pageControl = view as? UIPageControl
            }
        }

        if (scrollView != nil && pageControl != nil) {
            scrollView?.frame = view.bounds
            view.bringSubviewToFront(pageControl!)
        }
    }

答案 4 :(得分:0)

如果您将UIPageControl的背景颜色设置为背景图片,其外观与VC的背景颜色相同,则可能会有效:

[UIPageControl appearance].backgroundColor  = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pageControllerBackground"]];

答案 5 :(得分:0)

以下是胡安·阿里扎延伸的答案

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let subViews: NSArray = view.subviews
    var scrollView: UIScrollView? = nil
    var pageControl: UIPageControl? = nil

    for view in subViews {
        if view.isKindOfClass(UIScrollView) {
            scrollView = view as? UIScrollView
        }
        else if view.isKindOfClass(UIPageControl) {
            pageControl = view as? UIPageControl
            pageControl?.pageIndicatorTintColor = UIColor.lightGrayColor()
            pageControl?.currentPageIndicatorTintColor = UIColor.blackColor()
            pageControl?.backgroundColor = UIColor.clearColor()
        }
    }

    if (scrollView != nil && pageControl != nil) {
        scrollView?.frame = view.bounds
        view.bringSubviewToFront(pageControl!)
    }
}

答案 6 :(得分:-2)

试试这个:

pageControl = [UIPageControl appearance];

//for change the bullets color
pageControl.pageIndicatorTintColor = [UIColor colorWithRed:(129.0/255) green:(129.0/255) blue:(129.0/255) alpha:1.0];
pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:(06.0/255) green:(122.0/255) blue:(145.0/255) alpha:1.0];

pageControl.backgroundColor = [UIColor clearColor];