индикатор uipagecontrol (точка) выпуск - PullRequest
2 голосов
/ 10 января 2011

Хай Все ...

Я хочу изменить цвет индикатора точки (uipagecontroller) ... Для этого я делаю следующие шаги.

Создать новый класс с именем PageControl с 2 методами

1.- (void) setCurrentPage:(NSInteger)page

2.- (void) setNumberOfPages:(NSInteger)pages

- (void) setCurrentPage:(NSInteger)page 
{
    NSLog(@"setCurrentPage");
    [super setCurrentPage:page];
    NSString* imgActive = [[NSBundle mainBundle] pathForResource:@"activeimage" ofType:@"png"];
    NSString* imgInactive = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
    {
        UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];

        if (subviewIndex == page) 
            [subview setImage:[UIImage imageWithContentsOfFile:imgActive]];          
        else
            [subview setImage:[UIImage imageWithContentsOfFile:imgInactive]];           

        subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
    }
}


- (void) setNumberOfPages:(NSInteger)pages 
{
    NSLog(@"setNumberOfPages");
    [super setNumberOfPages:pages];
    NSString* img = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
    {
        UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];            
        [subview setImage:[UIImage imageWithContentsOfFile:img]];        
        subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
    }
}

Уже у меня одно представление с pagecontrol и scrollview ... Вот что я делаю, это выбираю uipagecontroller из nib и выбираю инспектор идентификации и выбираю имя класса PageControl (недавно созданный класс с 2 методами), для которого он работает изменяя цвет при смахивании изображений, но он не работает для нажатия на элемент управления страницы для перехода на следующую страницу ...

Я не знаю, что я хочу включить или какую ошибку я совершаю ... пожалуйста, помогите мне сделать это ...

Спасибо ...

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Если вы хотите включить прокрутку страницы по щелчку точки, то вам необходимо в первую очередь связать свойство «значение изменено» в xib-файле с действием, которое вы задали в своем коде.

Я реализовал ту же функциональность в одном из моих проектов, поэтому он точно будет работать.

- (IBAction)changePage:(id)sender {
int page = pageControl.currentPage;
CGFloat pageWidth = scrollView.frame.size.width;

pageWidth = scrollView.frame.size.width;
pageControl.currentPage = page;

CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];

// Set the boolean used when scrolls originate from the UIPageControl. See scrollViewDidScroll: above.

}

Приветствия

0 голосов
/ 05 октября 2013

Ваш вышеприведенный код дает сбой в iOS 7. Я нашел решение этой проблемы. Я знаю, что это не так, но уверен, что это работает, пока iOS 8 не будет выпущен на рынок.

Причина аварии:

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

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

...