私はiPhoneプログラミングの初心者で、ページコントロールを使用するアプリを開発しようとしています。ビューの背景色は白で、ページコントローラーのデフォルトの色も白です。これにより、ビュー上でページコントロールが非表示になるため、ページコントロールの背景色を変更して表示します。現在、ビューにはパッチが適用されており、不良です。ページ制御のためにドットの色だけを変更する方法はありますか?
前もって感謝します
ページインジケーターにカスタムイメージを使用するようにUIPageControlをカスタマイズしました。以下にクラスの内臓をリストしました...
GrayPageControl.h
@interface GrayPageControl : UIPageControl
{
UIImage* activeImage;
UIImage* inactiveImage;
}
GrayPageControl.m
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
activeImage = [[UIImage imageNamed:@"active_page_image.png"] retain];
inactiveImage = [[UIImage imageNamed:@"inactive_page_image.png"] retain];
return self;
}
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
-(void) setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
次に、View Controllerで通常のUIPageControlのように使用します
IBOutlet GrayPageControl* PageIndicator;
編集:
GrayPageControlがあるView Controllerには、GrayPageControl.ValueChangedイベントにリンクされているIBActionがあります。
-(IBAction) pageChanged:(id)sender
{
int page = PageIndicator.currentPage;
// update the scroll view to the appropriate page
CGRect frame = ImagesScroller.frame;
frame.Origin.x = frame.size.width * page;
frame.Origin.y = 0;
[ImagesScroller scrollRectToVisible:frame animated:YES];
}
IOS7でアプリケーションがクラッシュします。 iOS 7のソリューションがあります:
クラッシュの理由:
iOS 7 [self.subViews objectAtIndex: i]
はUIView
の代わりにUIImageView
を返し、setImage
はUIView
のプロパティではなく、アプリがクラッシュします。次のコードを使用して問題を解決します。
サブビューがUIView
(iOS7の場合)かUIImageView
(iOS6以前の場合)かを確認します。そして、それがUIView
である場合、そのビューのサブビューとしてUIImageView
を追加し、クラッシュしないように動作します。
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
- (UIImageView *) imageViewForSubview: (UIView *) view
{
UIImageView * dot = nil;
if ([view isKindOfClass: [UIView class]])
{
for (UIView* subview in view.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
dot = (UIImageView *)subview;
break;
}
}
if (dot == nil)
{
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
[view addSubview:dot];
}
}
else
{
dot = (UIImageView *) view;
}
return dot;
}
これがiOS7のur問題も解決することを願っています。 Anyponeがそのための最適なソリューションを見つけた場合はコメントしてください。 :)
ハッピーコーディング
JWDの答えが道です。ただし、色を変更するだけでよい場合は、これを行わないでください:
この手法はiOS6.0以降でのみ動作します!
UIPageControlを選択して、属性インスペクターに移動します。多田。
または、次の2つのプロパティを試すこともできます。
pageIndicatorTintColor property
currentPageIndicatorTintColor property
これはとても簡単です。質問をもう一度読んで、間違いではないことを確認します。あなたは本当に色を変えたいだけですよね?それからはい。
あなたはまだその法的な点にこだわっています。素晴らしいドット画像にJWDテクニックを使用します。
必要なコードは1行だけです。例は黒色に設定されています。
pageControl.pageIndicatorTintColor = [UIColor blackColor];
DDPageControl は、優れた代替品です。見てみな!
アーカイブされたブログ投稿を表示することもできます here 。
次のコードを使用して、ページインジケーターの色合いと現在のページインジケーターの色合いを変更できます。
pageControl.pageIndicatorTintColor = [UIColor orangeColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
ドットの色を変更したり、カスタマイズしたい場合は、JWDの推奨どおりに作成できますが、少し別の方法で作成できます。
#pragma mark - LifeCycle
- (void)setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
#pragma mark - Private
- (void)updateDots
{
for (int i = 0; i < [self.subviews count]; i++) {
UIView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) {
dot.backgroundColor = UIColorFromHEX(0x72E7DB);
dot.layer.cornerRadius = dot.frame.size.height / 2;
} else {
dot.backgroundColor = UIColorFromHEX(0xFFFFFF);
dot.layer.cornerRadius = dot.frame.size.height / 2 - 1;
dot.layer.borderColor = UIColorFromHEX(0x72E7DB).CGColor;
dot.layer.borderWidth = 1;
}
}
}
その結果、次のようなものが得られます
マクロも:
#define UIColorFromHEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]
これを行うための最良かつ最も簡単な方法は、AppDelegate.mのdidFinishLaunchingWithOptionsメソッドに次のコード行を追加することです。
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
別の stackoverflow question で この解決策 を見てみたいかもしれません。
カスタムイメージを使用する場合の関連する回答を次に示します(柔軟性があり、色を直接変更するのではなくイメージを使用できる場合)。