Есть ли способ изменить цвет точек индикатора страницы

Я новичок в программировании на iphone, я пытаюсь разработать приложение, использующее управление страницей. Цвет фона моего представления белый, а параметры страницы – по умолчанию, также белый, что делает управление страницей невидимым на моем представлении, поэтому я изменил черный цвет элемента управления страницы, чтобы сделать видимым. Теперь представление выглядит исправленным и плохим. Есть ли способ изменить цвет точек для управления страницей?

заранее спасибо

Мы настроили UIPageControl для использования пользовательского изображения для индикатора страницы, я перечислил кишки classа ниже …

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

Затем в controllerе просмотра мы просто используем его как обычный UIPageControl

 IBOutlet GrayPageControl* PageIndicator; 

Редактировать:

В controllerе представления, у которого есть 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]; } 

Сбой приложения в iOS7. У меня есть решение для iOS 7:

Причина краха:

в iOS 7 [self.subViews objectAtIndex: i] возвращает UIView Вместо UIImageView и setImage не является свойством UIView и приложение выходит из строя. Я решаю свою проблему, используя следующий код.

Проверьте, является ли subview UIView (для iOS7) или UIImageView (для iOS6 или ранее). И если это UIView я собираюсь добавить UIImageView качестве 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 найдет оптимальное решение для этого, прокомментируйте. 🙂

Счастливое кодирование

Ответ JWD – это путь. Однако, если вы хотите только изменить цвет, почему бы не сделать это:

Этот метод будет работать только на iOS6.0 и выше!

введите описание изображения здесь

Выберите ваш UIPageControl, перейдите в инспектор атрибутов. Тад.

Или вы можете поиграть с этими двумя свойствами:

  pageIndicatorTintColor property currentPageIndicatorTintColor property 

Это так просто. Я снова прочитал вопрос, чтобы убедиться, что я не ошибаюсь. Вы действительно хотите изменить цвет, не так ли? Тогда да.

Ты все еще придерживаешься этих законных точек. Используйте технологию JWD для потрясающих точечных изображений.

всего лишь одна строка кода. Пример установлен в черный цвет.

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

В результате вы получите что-то вроде

введите описание изображения здесь

Также macros:

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

Лучший и самый быстрый способ сделать это – добавить следующие строки кода в метод didFinishLaunchingWithOptions в AppDelegate.m

 UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; pageControl.backgroundColor = [UIColor whiteColor]; 

Вы можете взглянуть на это решение в другом вопросе stackoverflow .

Вот связанный ответ для использования пользовательского образа (если вы гибкий и можете использовать изображение, а не напрямую изменять цвета).

Настройте точку с изображением UIPageControl по индексу 0 UIPageControl

Давайте будем гением компьютера.