Есть ли способ изменить цвет точек индикатора страницы
Я новичок в программировании на iphone, я пытаюсь разработать приложение, использующее управление страницей. Мой цвет фонового изображения белый и контрольные страницы по умолчанию, также белый, что делает управление страницей невидимым на моем представлении, поэтому я изменил цвет фона на панели управления страницы, чтобы сделать видимым. Теперь представление выглядит исправленным и плохим. Есть ли способ изменить цвет точек для управления страницей?
Заранее спасибо
Ответы
Ответ 1
Мы настроили 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];
}
Затем в контроллере просмотра мы просто используем его как обычный UIPageControl
IBOutlet GrayPageControl* PageIndicator;
Edit:
В контроллере представления, у которого есть GrayPageControl, у меня есть IBAction, связанный с событием GrayPageControl.ValueChanged.
-(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];
}
Ответ 2
Сбой приложения в iOS7. У меня есть решение для iOS 7:
Причина сбоя:
в iOS 7 [self.subViews objectAtIndex: i]
возвращает UIView
Вместо UIImageView
и setImage
не является свойством UIView
, и приложение выходит из строя. Я решаю свою проблему, используя следующий код.
Проверьте, является ли subview 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. и если Anypone найдет оптимальное решение для этого, прокомментируйте.:)
Счастливое кодирование
Ответ 3
Ответ JWD - это путь. Однако, если вы хотите просто изменить цвет, почему бы не сделать это:
Этот метод будет работать только на iOS6.0 и выше!
![enter image description here]()
Выберите ваш UIPageControl, перейдите к инспектору атрибутов. Тад.
Или вы можете играть с этими двумя свойствами:
pageIndicatorTintColor property
currentPageIndicatorTintColor property
Это так просто. Я снова прочитал вопрос, чтобы убедиться, что я не ошибаюсь. Вы действительно хотите изменить цвет, не так ли? Тогда да.
Ты все еще придерживаешься этих законных точек. Используйте технологию JWD для потрясающих точечных изображений.
Ответ 4
всего лишь одна строка кода для вашего запроса. Пример установлен на черный цвет.
pageControl.pageIndicatorTintColor = [UIColor blackColor];
Ответ 5
DDPageControl - отличная замена. Проверьте это!
Вы также можете просмотреть архивную запись блога здесь.
Ответ 6
Вы можете изменить цвет оттенка индикатора страницы и текущий цвет индикатора текущей страницы с помощью следующего кода:
pageControl.pageIndicatorTintColor = [UIColor orangeColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
Ответ 7
Если вы просто хотите изменить цвет точек или настроить его, вы можете сделать это, как рекомендовано 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;
}
}
}
В результате вы получите что-то вроде
![enter image description here]()
Также макросы:
#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]
Ответ 8
Лучший и самый быстрый способ сделать это - добавить следующие строки кода в метод didFinishLaunchingWithOptions в AppDelegate.m
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
Ответ 9
Возможно, вы захотите посмотреть это решение в другой вопрос о стеке..
Ответ 10
Вот связанный ответ для использования пользовательского изображения (если вы гибки и можете использовать изображение, а не напрямую изменять цвета).
Настроить точку с изображением UIPageControl в индексе 0 UIPageControl