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];
次に、UIPageControl
とviewControllerBeforeViewController
のviewControllerAfterViewController
のインデックスを更新しました
NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex;
self.pageControl.currentPage = index;
@ 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;
pageControl.backgroundColor = [UIColor clearColor];
動作していますが!! backgroundColor
のUIPageViewController
を[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];
}
ページコントロールはデフォルトで透過的です。
このサンプルコードで確認してください:
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]];
以下のより多くのカスタマイズの可能性を見つけてください
ページコントロールの外観
以下に示すプロパティを設定することで、ページコントロールの外観をカスタマイズできます。
アプリのすべてのページコントロールの外観をカスタマイズするには、appearance proxyを使用します(たとえば、[UIPageControl外観])。外観プロキシの詳細については、 外観プロキシ を参照してください。
ティントカラー
ページコントロールの外観をカスタマイズする唯一の方法は、各ページを表すドットにカスタムティントを設定することです。現在のページ(currentPageIndicatorTintColor)フィールドは、現在表示されているページを表すドットの色に影響し、色合いの色(pageIndicatorTintColor)フィールドは、他のすべてのページを表すドットの色に影響します。デフォルトの色は、現在のページのドットでは白、他のページのドットでは半透明の灰色です。
カスタムカラーを半透明にする場合は、アルファ値が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];
Xcode 6.1.1およびiOS 8.1.1の時点で、UIPageControlオブジェクトの背景色をクリアカラーに設定するとうまくいくことを知っています。
[[self pageControl] setBackgroundColor:[UIColor clearColor]];
私はついに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!)
}
}
UIPageControl
の背景色を背景画像に設定すると、VCの背景色:
[UIPageControl appearance].backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pageControllerBackground"]];
ここにフアン・アリザの拡張による答えがあります
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!)
}
}