2010-01-13 6 views

Répondre

11

Comme le dit Phil, vous pouvez avoir un "réfléchi" par exemple UIImageView:

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

@property (nonatomic, retain) UIImage *image; 

@end 

Et puis, dans votre implémentation, quelque chose comme ça

@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

Pourquoi changez-vous l'alpha de l'image réfléchie, puis ne renvoyez qu'une seule image? – Jaba

+0

Je change l'alpha pour créer une sorte d'effet de reflet "métallique" :) Quant à la propriété getter, étant donné que les deux images reçoivent la même image, retourner l'une d'elles est la même, et j'ai choisi de retourner l'image _imageView, mais c'est un choix arbitraire. Merci d'avoir choisi ma réponse! –

+0

C'est la plupart du temps là-bas. Cependant, il n'inclut pas l'effet "fondu". – philsquared

-3

Le plus simple est de le faire à la main dans Photoshop! (sérieusement - si c'est pratique fais juste ça).

Sinon, vous devrez faire une copie inversée de l'image (ou au moins la moitié inférieure) pour placer sous la vraie, recouverte d'un dégradé de noir (en supposant que votre arrière-plan est noir) avec alpha = 1 à alpha = 0.

Si vous devez le placer sur des arrière-plans arbitraires, c'est un peu plus complexe car vous devrez appliquer le dégradé de alpha = 0 à alpha = 1 à votre image inversée. J'ai fait du code une fois pour le faire - j'essaierai de l'extraire plus tard quand j'arriverai sur mon Mac, si personne d'autre n'a trouvé quelque chose plus tôt.

+0

Er, comment le PO peut faire des réflexions pour les images d'autres utilisateurs? L'idée est que son application a les réflexions, comme le fait Cover Flow. – JBRWilkinson

+0

vous faites beaucoup de suppositions là, @JBRWilkinson – philsquared

20

Il suffit d'utiliser la sample code in the the iPhone SDK library

Mise à jour: Lien maintenant mis à jour vers un nouvel emplacement

+0

Cool, ce n'était pas là la dernière fois que je devais faire ceci :-) – philsquared

+1

désolé, mais l'URL n'est pas valide maintenant – Xiao

+0

https://developer.apple. com/bibliothèque/ios/# samplecode/Réflexion/Introduction/Intro.html #// apple_ref/doc/uid/DTS40008063 – Krumelur

2

J'ai écrit un article sur la façon de générer des réflexions d'un élément de l'interface utilisateur ou d'un groupe d'éléments. La technique en conserve peut être lâchée dans votre projet et est vraiment facile à utiliser. Le code source et l'article peuvent être trouvés à http://aptogo.co.uk/2011/08/no-fuss-reflections/

+0

J'aimerais lire ça mais le lien est cassé :( –