我怎样才能使这个工作与 UIScrollView?

Posted

技术标签:

【中文标题】我怎样才能使这个工作与 UIScrollView?【英文标题】:How could I make this work with UIScrollView? 【发布时间】:2011-08-31 14:14:39 【问题描述】:

我在 UIScrollView(作为子视图)内动态插入 1 到 300 个按钮。目前,按钮排列得很好,但没有像我希望的那样滚动。它只是水平滚动而没有分页效果。理想情况下,我希望它工作的方式是:

每个“页面”最多显示 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】:

您是否将 scrollView.pagingEnabled 设置为 YES?

【讨论】:

我可以毫无问题地滚动浏览,但它的行为并不符合我的预期。目前它从左到右滚动,但一次不显示 48 个按钮(我的意思是,如果我向右滚动,我应该会看到一组全新的 48 个按钮) 对不起,我只是愚蠢:( pagingEnabled 为我做了。现在我只需要调整尺寸,以便按钮的边缘不会显示在新页面上

以上是关于我怎样才能使这个工作与 UIScrollView?的主要内容,如果未能解决你的问题,请参考以下文章

如果输入是元组,我怎样才能使我的代码工作?

如何做优化,UITabelView才能更加顺滑

我怎样才能使这个查询 sargable?

我有一个工作布尔函数,但我的代码非常笨拙。我怎样才能使它更顺畅? [关闭]

CentOS 6.X、iptables 1.47 和 Geolite2:我怎样才能使它工作?

我怎样才能使这个动画更流畅?