J'ai déjà eu un problème similaire dans le passé. Ce qui suit pourrait fonctionner pour vous une solution de contournement:
UIGraphicsBeginImageContextWithOptions(editingView.bounds.size, NO, 0.0);
[editingView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Notez que vous risquez de perdre une certaine précision dans la capture d'écran, car il peut exclure brouille, et certaines fonctionnalités d'animation de base.
Edit:
Il semble y avoir des problèmes/compromis avec les deux renderInContext
et drawViewHierarchyInRect
. Le code suivant peut être la peine d'essayer (tiré de here pour référence):
- (CGContextRef) createBitmapContextOfSize:(CGSize) size {
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
int bitmapByteCount;
int bitmapBytesPerRow;
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
colorSpace = CGColorSpaceCreateDeviceRGB();
if (bitmapData != NULL) {
free(bitmapData);
}
bitmapData = malloc(bitmapByteCount);
if (bitmapData == NULL) {
fprintf (stderr, "Memory not allocated!");
return NULL;
}
context = CGBitmapContextCreate (bitmapData,
size.width,
size.height,
8, // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaNoneSkipFirst);
CGContextSetAllowsAntialiasing(context,NO);
if (context== NULL) {
free (bitmapData);
fprintf (stderr, "Context not created!");
return NULL;
}
CGColorSpaceRelease(colorSpace);
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, size.height);
CGContextConcatCTM(context, flipVertical);
return context;
}
Ensuite, vous pouvez faire:
CGContextRef context = [self createBitmapContextOfSize:editingView.bounds.size];
[editingView.layer renderInContext:context];
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage* background = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);
Salut Allan Poole, j'ai essayé cela. mais je n'ai pas réussi à obtenir une capture instantanée pour CAEmitterLayer avec UIView. pour cela, j'ai trouvé quelque chose en rapport avec Core Animations pouvez vous référer ce lien pour une idée rapide http://stackoverflow.com/questions/11926690/caemitterlayer-not-rendering-when-renderincontext-of-superlayer-is-called. et s'il vous plaît aidez-moi à ce sujet.Et s'il vous plaît passer par des liens gif que j'ai fourni –
Il semble y avoir des problèmes/compromis avec les deux solutions. J'ai mis à jour ma réponse avec une alternative possible. Le code provient d'un article assez ancien, il peut ou peut ne pas fonctionner. –
Ne fonctionne pas pour moi.missing CAEmitterLayer –