我怎样才能使这个工作与 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?的主要内容,如果未能解决你的问题,请参考以下文章
我有一个工作布尔函数,但我的代码非常笨拙。我怎样才能使它更顺畅? [关闭]