私が達成しようとしていること
- 背景のスレッドで画像を描く
- をに変換
CGImage
し、メインスレッドUIImage
のに追加します。UIImageView
UICollectionViewCell
アルファ値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];
これらのメソッドは、私のメソッドfadeInImageとともに、cellForRowAtIndexPathメソッド中に呼び出されます。
[UIView animateWithDuration:.6 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
photoView.alpha = 1;
}completion:nil];
実行すると、BadAccess呼び出しが発生してクラッシュします。メインスレッドとバックグラウンドスレッドが画像を相互に受け渡していることと関係があると思います。何か案は?みんなありがとう。