Есть ли способ изменить цвет точек индикатора страницы - PullRequest
28 голосов
/ 04 августа 2010

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

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

Ответы [ 10 ]

51 голосов
/ 05 августа 2010

Мы настроили 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];
}
17 голосов
/ 01 октября 2013

Приложение вылетает в 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.и если Anypone найдет оптимальное решение для этого, пожалуйста, прокомментируйте.:)

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

15 голосов
/ 17 октября 2012

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

Этот метод будет работать только на iOS6.0 и более поздних версиях!*

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

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

  pageIndicatorTintColor  property
  currentPageIndicatorTintColor  property

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

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

7 голосов
/ 11 июля 2013

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

pageControl.pageIndicatorTintColor = [UIColor blackColor];
5 голосов
/ 26 ноября 2011

DDPageControl - отличная замена. Проверьте это!

Вы также можете просмотреть архивную запись блога здесь .

4 голосов
/ 04 ноября 2015

Вы можете изменить цвет оттенка индикатора страницы и цвет оттенка индикатора текущей страницы с помощью следующего кода:

pageControl.pageIndicatorTintColor = [UIColor orangeColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
3 голосов
/ 26 февраля 2015

Если вы просто хотите изменить цвет точек или настроить его, вы можете сделать это в соответствии с рекомендациями 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]
2 голосов
/ 04 мая 2016

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

UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
1 голос
/ 02 декабря 2016

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

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

1 голос
/ 03 декабря 2010

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

...