我正在努力完成的事情
- 在后台线程中绘制图像
- 将 转换
CGImage
为 aUIImage
并将其添加到UIImageView
主线程上的 a 。 - 淡入图像视图,它位于
UICollectionViewCell
从 alpha 值 0 到 1 的子类上。 - 这样做是为了在滚动时不会出现断断续续的情况
UICollectionView
问题
该行为起初表现正常,但很快就偏离了不可预测性,并且通常很快导致EXC_BAD_ACCESS
错误,发生在将 uiimage 转换为 cgimage 的过程中的某个地方,反之亦然。
编码
//setup for background drawing
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGContextRef context;
context = CGBitmapContextCreate(NULL, 250, backgroundHeight - 112, 8, 250 * 4, colorSpaceRef, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
CGColorSpaceRelease(colorSpaceRef);
//Take the image I want drawn, convert to cgimage for background drawing
CGImageRef image = contentImage.CGImage;
CGContextDrawImage(context, CGRectMake(0, 0, 250, backgroundHeight - 112), image);
CGImageRelease(image);
CGImageRef outputImage = CGBitmapContextCreateImage(context);
imageRef = outputImage;
[self performSelectorOnMainThread:@selector(addImageToView) withObject:nil waitUntilDone:YES];
CGContextRelease(context);
CGImageRelease(outputImage);
addImageToView 方法只是创建一个图像并添加到我的 UIImageView
UIImage * image = [UIImage imageWithCGImage:imageRef];
[photoView setImage:image];
这些方法在 cellForRowAtIndexPath 方法中被调用,以及我的方法 fadeInImage
[UIView animateWithDuration:.6 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
photoView.alpha = 1;
}completion:nil];
当我运行时,我会收到 Bad Access 调用并崩溃。我猜这与主线程和后台线程在彼此之间传递图像有关。有任何想法吗?多谢你们。