我正在使用带可滚动单元格的UITableView。每个单元格包含近20到25个按钮,所有按钮都有边框颜色和半径。因此,我的视图控制器演示非常慢。滚动表格视图时,应用程序也会变得太慢。
创建后我尝试复制按钮。但重复按钮没有任何边框颜色/半径。这就是我给出图层样式和重用按钮的方式。
button.layer.cornerRadius = 5;
button.layer.borderWidth = 1.0f;
button.layer.masksToBounds = YES;
button.backgroundColor = CRICHQ_GREY;
button.layer.borderColor = [UIColor lightGrayColor].CGColor;
复制,
NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject:oldButton];
UIButton *clonedButton = [NSKeyedUnarchiver unarchiveObjectWithData:dataSave];
但是当我复制按钮时,我没有在clonedButton按钮中获得图层样式。它给了我简单的按钮,所以我应该再次添加图层属性。
我搜索了许多链接,但我没有得到任何好的解决方案。任何帮助将不胜感激。 提前致谢。
答案 0 :(得分:3)
我不确定您对使用背景图片而不是图层的反对意见,但我尝试了这一点,并且它使设备上的滚动性能更好。表视图控制器的初始加载仍然有点慢,但后续加载速度很快。这是我用于测试的单元类中的代码,
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.layer.cornerRadius = 5;
button.layer.borderWidth = 2.0f;
button.layer.masksToBounds = YES;
button.backgroundColor = [UIColor yellowColor];
button.layer.borderColor = [UIColor darkGrayColor].CGColor;
button.frame = CGRectMake(0,0, 50, 44);
UIImage *bg = [self imageWithView:button];
for (int i = 0; i<5; i++) {
for (int j = 0; j<5; j++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
NSString *title = [NSString stringWithFormat:@"BT-%d", j*5 + i];
[button setTitle:title forState:UIControlStateNormal];
[button addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor colorWithPatternImage:bg];
button.frame = CGRectMake(60*i + 16, 50*j + 5, 50, 44);
[self.contentView addSubview:button];
}
}
}
return self;
}
- (UIImage *)imageWithView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.bounds.size.width, view.bounds.size.height), view.opaque, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}