Я пытаюсь создать моментальный снимок UICollectionViewCell, создав CGBitMapContext. Я не совсем ясно, о том, как это сделать, или как использовать связанные классы, но после того, как немного исследований, я написал следующий метод, который вызывается из внутри моего UICollectionViewCell подкласса:Создайте CGImage из CGBitmapContext и добавьте в UIImageView
- (void)snapShotOfCell
{
float scaleFactor = [[UIScreen mainScreen] scale];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, self.frame.size.width * scaleFactor, self.frame.size.height * scaleFactor, 8, self.frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst);
CGImageRef image = CGBitmapContextCreateImage(context);
UIImage *snapShot = [[UIImage alloc]initWithCGImage:image];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.frame];
imageView.image = snapShot;
imageView.opaque = YES;
[self addSubview:imageView];
CGImageRelease(image);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
}
Результат является что изображение не появляется. После отладки я могу определить, что у меня есть действительный (не нулевой) контекст, CGImage, UIImage и UIImageView, но ничего не отображается на экране. Может ли кто-нибудь сказать мне, что мне не хватает?
Мой ответ предполагает ARC на – NSProgrammer
Спасибо, у меня был этот код работает, но проблема была, что она занимает слишком много времени, чтобы выполнить и в то время как выполнение вызывало зависание прокрутки просмотра коллекции. Было предложено вместо этого «перерисовать каждую ячейку в свой собственный растровый контекст на фоновом потоке». Поэтому я пытаюсь понять, как начать это делать. – jac300
Обновлен мой ответ. В конечном счете, что бы вы ни делали, мне нужно визуализировать контекст, прежде чем принимать изображение из контекста, это ключ. – NSProgrammer