【发布时间】:2010-01-13 17:24:32
【问题描述】:
我只想用最简单的方法在易于管理的 UIImageVies 下进行反射。
【问题讨论】:
标签: iphone objective-c reflection uiimageview
我只想用最简单的方法在易于管理的 UIImageVies 下进行反射。
【问题讨论】:
标签: iphone objective-c reflection uiimageview
只需使用sample code in the the iPhone SDK library
更新:链接现已更新到新位置
【讨论】:
正如 Phil 所说,您可以拥有一个“反射”的 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
【讨论】:
我写了一篇关于如何生成任何 UI 元素或元素组的反射的文章。罐头技术可以放入您的项目中,并且非常易于使用。源码和文章可以在http://aptogo.co.uk/2011/08/no-fuss-reflections/找到
【讨论】:
最简单的方法是在 Photoshop 中手动完成! (说真的 - 如果这很实际,就这样做)。
否则,您需要制作图像的倒置副本(或至少下半部分)以放置在真实图像下方,并覆盖从黑色渐变(假设您的背景为黑色),alpha=1 到 alpha =0。
如果您需要将其放置在任意背景上,它会稍微复杂一些,因为您必须将从 alpha = 0 到 alpha = 1 的渐变应用到倒置图像。 我曾经敲过一些代码来做这件事 - 如果没有其他人更早提出任何建议,我会在稍后使用我的 Mac 时尝试挖掘它。
【讨论】: