我最初尝试使用核心图形将我的图像绘制到单元格中,但这工作得很慢,因为我的图像非常大。现在我在我的单元格中使用UIImageViews在每个单元格中显示1个图像。
因为我正在缓存图像,所以在第一次加载每个单元格后,它会完美地滚动。当它第一次加载时,会有一点滞后。
我可以告诉你的不是很多,因为这是一个相当普遍的问题,但我想我可以告诉你我到目前为止是如何加载我的图像的:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.isReadyForImage = NO;
NSString *generated = [Entry generateString];
const char *cString = (const char*)[generated UTF8String];
dispatch_queue_t queue = dispatch_queue_create(cString, NULL);
dispatch_async(queue, ^{
self.thumbnailButton = [[UIButton alloc] init];
self.thumbnailButton.contentMode = UIViewContentModeCenter;
self.thumbnailButton.layer.shadowColor = [[UIColor blackColor] CGColor];
self.thumbnailButton.layer.shadowOffset = CGSizeMake(0, 2);
self.thumbnailButton.layer.shadowOpacity = 0.2;
self.thumbnailButton.layer.shadowRadius = 3;
self.thumbnailButton.userInteractionEnabled = YES;
dispatch_async(dispatch_get_main_queue(), ^{
self.isReadyForImage = YES;
if (self.imageToBecomeThumbnail != nil) {
[self setupThumbnail];
}
});
});
self.selectionStyle = UITableViewCellSelectionStyleNone;
}
return self;
}
-(void)resetShadowPath {
self.thumbnailButton.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.thumbnailButton.bounds].CGPath;
}
-(void)setThumbnail:(UIImage *)image {
self.imageToBecomeThumbnail = image;
if (self.isReadyForImage == YES) {
[self setupThumbnail];
}
}
-(void)setupThumbnail {
[self.thumbnailButton setImage:self.imageToBecomeThumbnail forState:UIControlStateNormal];
self.thumbnailButton.frame = CGRectMake(0, IMAGE_SPACING, self.imageToBecomeThumbnail.size.width, self.imageToBecomeThumbnail.size.height);
self.thumbnailButton.center = CGPointMake(self.bounds.size.width / 2, self.thumbnailButton.center.y);
[self resetShadowPath];
[self.thumbnailButton addTarget:self action:@selector(thumbnailPressed:) forControlEvents:UIControlEventTouchUpInside];
if (self.thumbnailButton.superview == nil) {
[self addSubview:self.thumbnailButton];
}
}
旁注:我不是指其他地方的调度队列。它说每个人都需要一个独特的,所以我破坏了这个随机字符串生成器代码。它是否需要是独一无二的,或者如果它们不会被再次提及它是否真的重要?
答案 0 :(得分:0)
独立于滚动填充缓存。一旦应用程序启动或新数据可用,就开始在第二个线程中生成缺少的缩略图。