Как я могу заставить это работать с UIScrollView? - PullRequest
0 голосов
/ 31 августа 2011

Я вставляю динамически где-нибудь от 1 до 300 кнопок внутри UIScrollView (как подпредставления).В настоящее время кнопки располагаются хорошо, но не прокручиваются так, как хотелось бы.Он просто прокручивается по горизонтали без пейджингового эффекта.В идеале они должны работать следующим образом:

  • Отображать до 48 кнопок на «страницу»
  • При прокрутке вправо показывать следующую «страницу» с48 дополнительных кнопок

Мой код:

-(void)populateScrollView:(NSMutableArray *)colors {
// Properties
NSInteger count = 0;
NSInteger rowsize = 48;
CGFloat pageNum = 6;
CGFloat pageWidth = scrollView.frame.size.width;
CGFloat pageHeight = scrollView.frame.size.height;
CGFloat visibleWidth = 465;

myButtons = [[NSMutableArray alloc]init];

// Clear the subviews if any
for (UIView *subview in scrollView.subviews) {
    [subview removeFromSuperview];
}

for (Color *element in colors) {
    // Set the button properties    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *image = [UIImage imageNamed:@"color_overlay.png"];
    [button setImage:image forState:UIControlStateNormal];
    [button setImage:image forState:UIControlStateHighlighted];
    div_t temp = div(count, rowsize);
    button.frame = CGRectMake(52 * temp.rem , 52*temp.quot, 52, 52);
    button.tag = count++;
    UIImage *effect = [UIImage imageNamed:element.image_resource];
    effectImage = [[UIImageView alloc] initWithImage:effect]; 
    effectImage.frame = CGRectMake(52 * temp.rem , 52*temp.quot, 52, 52);

    // Color the graphic if color available. If not, load the image
    unsigned result = 0;
    if ([element.hex_value length] > 1){
        NSScanner *scanner = [NSScanner scannerWithString:element.hex_value];
        [scanner scanHexInt:&result];
        button.backgroundColor = UIColorFromRGB(result);
    }
    else {
        effectImage.image = effect;
    }
    // Set actions for the color
    [button addTarget:self action:@selector(changeGraphicColor:) forControlEvents:UIControlEventTouchUpInside];
    [myButtons addObject:button];

    for (UIButton *myButton in myButtons){
        [scrollView insertSubview:effectImage atIndex:1];
        [scrollView insertSubview:myButton atIndex:2];   
    }
}
// Set scrollView contentSize and create pages:
CGFloat leftShift=floor(((visibleWidth-pageWidth)/2)/pageWidth)*pageWidth;
CGFloat contentSizeReduction=2*leftShift;

scrollView.contentSize = CGSizeMake(pageNum*pageWidth-contentSizeReduction,pageHeight);

[myButtons removeAllObjects];
[myButtons release];

}

Я думаю, способ добавления кнопок не позволит мне реализоватьчто я пытаюсь достичьЧто вы, ребята, думаете, что я здесь не так делаю?

1 Ответ

1 голос
/ 31 августа 2011

Вы установили для scrollView.pagingEnabled значение YES?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...