2010-01-13 11 views

Respuesta

11

Como dice Phil, puede tener un "refleja" instancia UIImageView:

@interface ReflectedImageView : UIView 
{ 
@private 
    UIImageView *_imageView; 
    UIImageView *_imageReflectionView; 
} 

@property (nonatomic, retain) UIImage *image; 

@end 

Y luego, en su implementación, algo como esto

@implementation ReflectedImageView 

@dynamic image; 

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     self.backgroundColor = [UIColor clearColor]; 

     // This should be the size of your image: 
     CGRect rect = CGRectMake(0.0, 0.0, 320.0, 290.0); 

     _imageReflectionView = [[UIImageView alloc] initWithFrame:rect]; 
     _imageReflectionView.contentMode = UIViewContentModeScaleAspectFit; 
     _imageReflectionView.alpha = 0.4; 
     _imageReflectionView.transform = CGAffineTransformMake(1, 0, 0, -1, 0, 290.0); 
     [self addSubview:_imageReflectionView]; 

     _imageView = [[UIImageView alloc] initWithFrame:rect]; 
     _imageView.contentMode = UIViewContentModeScaleAspectFit; 
     [self addSubview:_imageView]; 
    } 
    return self; 
} 

- (void)setImage:(UIImage *)newImage 
{ 
    _imageView.image = newImage; 
    _imageReflectionView.image = newImage; 
} 

- (UIImage *)image 
{ 
    return _imageView.image; 
} 

- (void)dealloc 
{ 
    [_imageView release]; 
    [_imageReflectionView release]; 
    [super dealloc]; 
} 

@end 
+0

¿Por qué cambias el alfa de la imagen reflejada, y luego solo devuelves una imagen? – Jaba

+0

Cambio el alfa para crear una especie de efecto de reflexión "metálico" :) En cuanto a la obtención de propiedad, dado que ambas vistas de imagen reciben la misma imagen, devolver cualquiera de ellas es la misma, y ​​elegí devolver la imagen _imageView, pero es una elección arbitraria. Gracias por seleccionar mi respuesta! –

+0

Eso es la mayor parte del camino. Sin embargo, no incluye el efecto "fade". – philsquared

-3

¡La manera más fácil es hacerlo a mano en Photoshop! (en serio, si eso es práctico simplemente haz eso).

De lo contrario, tendrá que hacer una copia invertida de la imagen (o al menos la mitad inferior) para colocar debajo de la real, superpuesta con un degradado de negro (suponiendo que el fondo es negro) con alfa = 1 para alpha = 0.

Si necesita ubicarlo sobre fondos arbitrarios es un poco más complejo ya que tendrá que aplicar el degradado de alfa = 0 a alfa = 1 a su imagen invertida. Cogí un código una vez para hacerlo; intentaré extraerlo más tarde cuando llegue a mi Mac, si nadie más ha encontrado algo antes.

+0

Er, ¿cómo puede el OP hacer reflejos para las imágenes de otros usuarios? La idea es que su aplicación tenga los reflejos, como lo hace Cover Flow. – JBRWilkinson

+0

usted está haciendo una gran cantidad de suposiciones allí, @JBRWilkinson – philsquared

20

Sólo tiene que utilizar el sample code in the the iPhone SDK library

actualización: Enlace ahora se actualiza a la nueva ubicación

+0

Genial, eso no estaba allí la última vez que tuve que hacer esto :-) – philsquared

+1

lo siento, pero la URL no es válida por ahora – Xiao

+0

https://developer.apple. com/library/ios/# samplecode/Reflection/Introduction/Intro.html # // apple_ref/doc/uid/DTS40008063 – Krumelur

2

Escribí un artículo sobre cómo generar reflejos de cualquier elemento de la interfaz de usuario o grupo de elementos. La técnica enlatada puede soltarse en su proyecto y es realmente fácil de usar. El código fuente y el artículo se pueden encontrar en http://aptogo.co.uk/2011/08/no-fuss-reflections/

+0

Me encantaría leer eso pero el enlace está roto :( –

Cuestiones relacionadas