私はiPhoneプログラミングの初心者です。ページコントロールを使用するアプリを開発しようとしています。ビューの背景色は白で、ページコントローラのデフォルトの色も白です。これにより、ビューでページコントロールが非表示になるため、ページコントロールの背景色を表示に変更しました。これで、ビューにパッチが適用され、不良であるように見えます。ページコントロールのドットの色だけを変更する方法はありますか?
前もって感謝します
私は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 を持つビュー コントローラーには、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では、代わりにand is not the property を[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の問題も解決されることを願っています。誰かがそのための最適な解決策を見つけたら、コメントしてください. :)
ハッピーコーディング
JWDの答えが道です。ただし、色を変更するだけの場合は、次のようにしてください。
このテクニックは、iOS6.0 以降でのみ機能します。
UIPageControl を選択して、属性インスペクターに移動します。多田。
または、次の 2 つのプロパティをいじることもできます。
pageIndicatorTintColor property
currentPageIndicatorTintColor property
これはとても簡単です。間違っていないことを確認するために、もう一度質問を読みました。あなたは本当に色を変えたいだけですよね?はい。
あなたはまだその合法的な点にこだわっています。素晴らしいドット絵にはJWDテクニックを使用してください。
たった 1 行のコードで、あなたの要求に応えます。黒色に設定した例。
pageControl.pageIndicatorTintColor = [UIColor blackColor];
DDPageControlは優れた代替品です。見てみな!
アーカイブされたブログ投稿はここで表示することもできます。
次のコードを使用して、ページ インジケーターの色合いと現在のページ インジケーターの色合いを変更できます。
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の質問で、このソリューションを確認することをお勧めします。
カスタム画像を使用するための関連する回答を次に示します(柔軟で、色を直接変更するのではなく画像を使用できる場合)。