2010-01-13 20 views

Odpowiedz

11

Jak mówi Phil, można mieć "odbicie" instancji UIImageView:

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

@property (nonatomic, retain) UIImage *image; 

@end 

a następnie, w Twojej implementacji coś takiego:

@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

Dlaczego zmieniasz alfa odbijanego obrazu, a następnie zwracasz tylko jedno zdjęcie? – Jaba

+0

Zmieniam alfa, tworząc rodzaj "metalicznego" efektu odbicia :) Jeśli chodzi o getter właściwości, biorąc pod uwagę, że oba widoki obrazów otrzymują ten sam obraz, zwracanie któregokolwiek z nich jest takie samo i wybrałem zwrócenie obrazu z _imageView, ale jest to arbitralny wybór. Dziękuję za wybór odpowiedzi! –

+0

To jest większość drogi. Nie obejmuje jednak efektu "zanikania". – philsquared

-3

Najprostszym sposobem jest zrobienie tego ręcznie w Photoshopie! (poważnie - jeśli to praktyczne, po prostu to zrób).

W przeciwnym razie należy ułożyć odwróconą kopię obrazu (lub przynajmniej jego dolną połowę), aby umieścić go poniżej rzeczywistego, nałożonego gradientem z czerni (zakładając, że tło jest czarne) z alfa = 1 do alpha = 0.

Jeśli chcesz umieścić go na dowolnym tle, jest to trochę bardziej skomplikowane, ponieważ będziesz musiał zastosować gradient od alfa = 0 do alfa = 1 do odwróconego obrazu. Raz zapukałem jakiś kod, aby to zrobić - spróbuję go przekopać później, kiedy dostanę się do mojego Maca, jeśli nikt wcześniej nie wymyśli niczego.

+0

. Jak, w jaki sposób PO może dokonywać refleksji dla obrazów innych użytkowników? Chodzi o to, że jego aplikacja ma odbicia, takie jak Cover Flow. – JBRWilkinson

+0

Podsuwasz tam wiele założeń, @JBRWilkinson – philsquared

20

Wystarczy użyć sample code in the the iPhone SDK library

Aktualizacja: link teraz zaktualizowany do nowej lokalizacji

+0

Fajnie, nie było mnie ostatnio, gdy musiałem to zrobić :-) – philsquared

+1

Niestety, URL nie jest już ważny – Xiao

+0

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

2

Napisałem artykuł o tym, jak wygenerować odbicia dowolnego elementu interfejsu użytkownika lub grupy elementów. Technikę puszki można upuścić do projektu i jest naprawdę łatwa w użyciu. Kod źródłowy i artykuł można znaleźć pod adresem http://aptogo.co.uk/2011/08/no-fuss-reflections/

+0

Chciałbym przeczytać, ale link jest zepsuty :( –

Powiązane problemy