我遇到了一个问题,其中UIProgressView作为iOS 7上UITableViewCell的子视图使得滚动性能非常差。这个问题在iOS 6或更低版本中并没有真正发生,滚动非常棒。我想知道我是否遗漏了新的UIProgressView或者它只是一个错误。在iOS 7上添加UIProgressView时,我已经看到性能从50-60 fps下降到30-40 fps。下面是一些在iOS 7上复制此帧丢弃的代码。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
progressView.frame = CGRectMake(0, 0, cell.contentView.frame.size.width - 20, progressView.frame.size.height);
progressView.center = CGPointMake(cell.contentView.frame.size.width/2, cell.contentView.frame.size.height/2);
progressView.tag = 1;
[cell.contentView addSubview:progressView];
}
UIProgressView *progressView = (UIProgressView *)[cell.contentView viewWithTag:1];
[progressView setProgress:drand48()];
// Configure the cell...
return cell;}
答案 0 :(得分:-2)
不是100%确定这是否是导致您所看到的问题,但问题可能在于您在那里创建了两个具有相同名称的UIProgressView变量,因此您可能会遇到引用问题:
UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
.
.
UIProgressView *progressView = (UIProgressView *)[cell.contentView viewWithTag:1];
我个人会做以下事情,因为这是一个更优雅的解决方案 - 细胞的子类:
·H
@interface ProgressViewCell : UITableViewCell
@property (nonatomic, retain) UIProgressView *progressView;
@end
的.m
- (id)init {
self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ProgressViewCell"];
self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
self.progressView.frame = CGRectMake(0, 0, self.contentView.frame.size.width - 20, 44);
self.progressView.center = CGPointMake(self.contentView.frame.size.width/2, self.contentView.frame.size.height/2);
[self.contentView addSubview:self.progressView];
return self;
}
然后在你的tableView中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ProgressViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ProgressViewCell"];
if (cell == nil) {
cell = [[ProgressViewCell alloc] init];
}
[cell.progressView setProgress:drand48()];
return cell;
}