Каков наиболее эффективный способ добавления отражения в UIImageView

Мне просто нужен самый простой способ сделать отражение под UIImageVies, которое легко управляется.

Ответы

Ответ 1

Как говорит Фил, у вас может быть "отраженный" экземпляр UIImageView:

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

@property (nonatomic, retain) UIImage *image;

@end

И затем, в вашей реализации, что-то вроде этого

@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

Ответ 3

Я написал статью о том, как создавать отражения любого элемента интерфейса или группы элементов. Консервированная техника может быть включена в ваш проект и очень проста в использовании. Исходный код и статью можно найти на http://aptogo.co.uk/2011/08/no-fuss-reflections/

Ответ 4

Самый простой способ - сделать это вручную в Photoshop! (серьезно - если это практично, просто сделайте это).

В противном случае вам нужно сделать инвертированную копию изображения (или, по крайней мере, нижнюю половину), чтобы разместить ниже реального, наложенного градиентом от черного (при условии, что ваш фон черный) с альфа-1 до альфа = 0.

Если вам нужно поместить его на произвольные фоны, это немного сложнее, так как вам придется применить градиент от альфа = 0 к альфа = 1 к вашему обращенному изображению. Однажды я выбил код, чтобы сделать это - попытаюсь выкопать его позже, когда я доберусь до своего Mac, если никто еще не придумает что-нибудь раньше.