Comment créer un reflet d'UIImage sans utiliser UIImageView? J'ai vu le code pomme pour la réflexion en utilisant deux images, mais je ne veux pas ajouter imageview dans mon application, je veux juste l'image entière de l'image originale et l'image réfléchie. Est-ce que n'importe quel corps sait comment faire cela.Réflexion de UIImage sans UIImageView
1
A
Répondre
1
Ceci est de UIImage + FX.m, créé par Nick Lockwood
UIImage * processedImage = //here your image
processedImage = [processedImage imageWithReflectionWithScale:0.15f
gap:10.0f
alpha:0.305f];
échelle est la taille de la réflexion, l'écart de la distance entre l'image et la réflexion, et l'alpha alpha de la réflexion
- (UIImage *)imageWithReflectionWithScale:(CGFloat)scale gap:(CGFloat)gap alpha:(CGFloat)alpha
{
//get reflected image
UIImage *reflection = [self reflectedImageWithScale:scale];
CGFloat reflectionOffset = reflection.size.height + gap;
//create drawing context
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.size.width, self.size.height + reflectionOffset * 2.0f), NO, 0.0f);
//draw reflection
[reflection drawAtPoint:CGPointMake(0.0f, reflectionOffset + self.size.height + gap) blendMode:kCGBlendModeNormal alpha:alpha];
//draw image
[self drawAtPoint:CGPointMake(0.0f, reflectionOffset)];
//capture resultant image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//return image
return image;
}
et
- (UIImage *)reflectedImageWithScale:(CGFloat)scale
{
//get reflection dimensions
CGFloat height = ceil(self.size.height * scale);
CGSize size = CGSizeMake(self.size.width, height);
CGRect bounds = CGRectMake(0.0f, 0.0f, size.width, size.height);
//create drawing context
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
//clip to gradient
CGContextClipToMask(context, bounds, [[self class] gradientMask]);
//draw reflected image
CGContextScaleCTM(context, 1.0f, -1.0f);
CGContextTranslateCTM(context, 0.0f, -self.size.height);
[self drawInRect:CGRectMake(0.0f, 0.0f, self.size.width, self.size.height)];
//capture resultant image
UIImage *reflection = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//return reflection image
return reflection;
}
gradientMask
+ (CGImageRef)gradientMask
{
static CGImageRef sharedMask = NULL;
if (sharedMask == NULL)
{
//create gradient mask
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 256), YES, 0.0);
CGContextRef gradientContext = UIGraphicsGetCurrentContext();
CGFloat colors[] = {0.0, 1.0, 1.0, 1.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2);
CGPoint gradientStartPoint = CGPointMake(0, 0);
CGPoint gradientEndPoint = CGPointMake(0, 256);
CGContextDrawLinearGradient(gradientContext, gradient, gradientStartPoint,
gradientEndPoint, kCGGradientDrawsAfterEndLocation);
sharedMask = CGBitmapContextCreateImage(gradientContext);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
UIGraphicsEndImageContext();
}
return sharedMask;
}
renvoie l'image avec la réflexion.
0
Vous pouvez rendre l'image et sa réflexion dans un contexte graphique, puis obtenir un CGImage
à partir du contexte et à partir de là un UIImage
. Mais la question est: pourquoi ne pas utiliser deux vues? Pourquoi pensez-vous que c'est un problème ou une limitation?
1
J'ai écrit un blog post awhile ago qui utilise CAReplicatorLayer d'une vue. Il est vraiment conçu pour gérer les mises à jour dynamiques d'une vue avec réflexion, mais je pense que cela fonctionnerait aussi bien pour ce que vous voulez faire.
Questions connexes
- 1. UIImage dans UIImageView bordée
- 2. Ajuster UIImage dans UIImageView
- 3. UIImage et problème UIImageView
- 4. UIImageView à UIImage
- 5. Redimensionnement de UIImage dans UIImageView
- 6. Image de réflexion de UIImageview
- 7. Ajustement d'un UIImage dans UIImageView
- 8. UIImageView fait pivoter mon UIImage
- 9. UIImage position shift dans UIImageView
- 10. Changer UIImageView ou UIImage largeur
- 11. UIImage pour UIImageView est nul
- 12. iphone - unique UIImage multiple UIImageView?
- 13. Impossible d'afficher UIImage dans UIImageView
- 14. Différence entre UIImage et UIImageView
- 15. manuellement Mise à l'échelle UIImage pour UIImageView
- 16. Manipuler UIImage avec GestureRecognizers - NOT UIImageView
- 17. Modification de UIImage dans UIImageView dans UIScrollView
- 18. BackgroundColor + image de UIImageView à UIImage
- 19. Utiliser un UIImageView pour ajuster un UIImage
- 20. Comment se débarrasser de la réflexion précédente lors de la réflexion d'un UIImageView (avec changement d'image)?
- 21. Comment enregistrer l'état d'un UIImage ou UIImageView?
- 22. Comment étirer un UIImage en UIImageView?
- 23. Sous-classe UIImage et l'ajout à UIImageView
- 24. Dessin UIImage à plusieurs endroits dans UIImageView
- 25. Évitez d'étendre UIImage à l'intérieur de mon UIImageView
- 26. UIImage en plateau sans échelle
- 27. Ajustement d'image UIImageView sans étirement
- 28. Charger un fichier PDF dans UIImage ou UIImageView?
- 29. Comment centrer l'échelle (faire pivoter) un UIImage dans un UIImageView
- 30. Conversion de coordonnées UIImageView Touch en coordonnées UIImage
Qu'est-ce que [[self class] gradientMask]? Et que retournera le code ci-dessus? Une image réfléchie ou une image entière (originale + réfléchie)? –
a ajouté la méthode gradientMask sur la réponse. L'imageWithReflectionWithScale renvoie l'original + reflété, l'image reflétéeImageWithScale renvoie uniquement la réflexion. – jcesarmobile
Comment changer la hauteur de l'image réfléchie? Je veux dessiner l'image originale en tant que demi-taille de la vue et l'autre moitié devrait être l'image reflétée ci-dessous. Même si je mets une valeur alfa à 1 de l'image réfléchie, elle montre une image opaque en bas. –