web-dev-qa-db-ja.com

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]; 

次に、UIPageControlviewControllerBeforeViewControllerviewControllerAfterViewControllerのインデックスを更新しました

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

@ powerj1984と@daniellarssonで述べたように、UIPageControlは位置と背景色に関して変更できないようです。

これをUIViewControllerに移動して、UIPageControlを作成し、

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

そして、これをviewDidLoadのように私のUIPageViewControllerの一番上に持ってきます

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

次に、viewControllerBeforeViewControllerとviewControllerAfterViewControllerのUIPageControlのインデックスを更新しました

NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; 
self.pageControl.currentPage = index;
8
sselvan
pageControl.backgroundColor = [UIColor clearColor];

動作していますが!! backgroundColorUIPageViewController[UIColor clearColor]にも設定する必要があります。コンテナービューの背景色が表示されます。

- (void)initPageViewController
{
    _pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                      navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                    options:nil];

    UIImageView *imgView= [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    imgView.image = [UIImage imageNamed:@"NiceBGImage"];
    [self.view addSubview:imgView];

    self.view.backgroundColor = [UIColor clearColor];

    _pageController.view.frame = ({
        CGRect frame = [[UIScreen mainScreen] bounds];
        frame;
    });

    _pageController.delegate = self;
    _pageController.dataSource = self;
    _pageController.view.backgroundColor = [UIColor clearColor];

    NSArray *controllers = @[_controllers[0]];

    [self.pageController setViewControllers:controllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:nil];

    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
    pageControl.backgroundColor = [UIColor clearColor];
    pageControl = [UIPageControl appearanceWhenContainedIn:[_pageController class], nil];

    [self addChildViewController:_pageController];
    [[self view] addSubview:_pageController.view];
    [self.pageController didMoveToParentViewController:self];
}
5
Miralem Cebic

ページコントロールはデフォルトで透過的です。

このサンプルコードで確認してください:

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

アプリのすべてのページコントロールの外観をカスタマイズするには、appearance proxyを使用します(たとえば、[UIPageControl外観])。外観プロキシの詳細については、 外観プロキシ を参照してください。

ティントカラー

ページコントロールの外観をカスタマイズする唯一の方法は、各ページを表すドットにカスタムティントを設定することです。現在のページ(currentPageIndicatorTintColor)フィールドは、現在表示されているページを表すドットの色に影響し、色合いの色(pageIndicatorTintColor)フィールドは、他のすべてのページを表すドットの色に影響します。デフォルトの色は、現在のページのドットでは白、他のページのドットでは半透明の灰色です。

enter image description here

カスタムカラーを半透明にする場合は、アルファ値が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のドキュメントで詳細を確認してください

4
Shamsudheen TK

Xcode 6.1.1およびiOS 8.1.1の時点で、UIPageControlオブジェクトの背景色をクリアカラーに設定するとうまくいくことを知っています。

[[self pageControl] setBackgroundColor:[UIColor clearColor]];
2
Audible

私はついに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!)
        }
    }
1
Juan Ariza

UIPageControlの背景色を背景画像に設定すると、VCの背景色

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

ここにフアン・アリザの拡張による答えがあります

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!)
    }
}
0
Illya Krit