ReflectionView是一个UIView子类,旨在简化创建iOS上类似于“倒影地板”效果的反光效果。
你可能已经注意到,Apple提供了相应的Sample项目,但Apple的解决方案只适用于图像,并且涉及相对较慢的CPU密集型绘制来更新反光效果,使其不适合映射动态内容。ReflectionView可以以两种模式运行;静态模式,类似于Apple的样例代码;或者动态模式,它使用Core Animation,并实时处理任何视图。这意味着您可以用它来反射包含动态元素(如控件或动画)的视图内容,并且反射将实时更新。
注意:'支持'意味着已对该版本进行过测试。'兼容'意味着该库应能在该OS版本上运行(即它不依赖于任何不可用的SDK功能),但不再进行兼容性测试,可能需要调整或修复错误以正常运行。
从1.2版本起,ReflectionView需要ARC。如果您想在非ARC项目中使用ReflectionView,只需将-fobjc-arc编译器标志添加到ReflectionView.m类。为此,请转到目标设置中的构建阶段选项卡,打开编译源组,双击列表中的ReflectionView.m,并在弹出窗口中键入-fobjc-arc。
如果您想将整个项目转换为ARC,请取消注释ReflectionView.m中的#error行,然后在Xcode中运行编辑 > 重构 > 转换到Objective-C ARC...工具,确保所有您希望使用ARC的文件都已选中(包括ReflectionView.m)。
ReflectionView的所有外部接口都不是线程安全的,您不应该在除了主线程之外调用任何方法或设置任何属性。
要在应用程序中使用ReflectionView,只需将ReflectionView类文件拖放到您的项目中,并添加QuartzCore框架。
您可以使用以下属性配置ReflectionView实例
@property (nonatomic, assign) CGFloat reflectionGap;
视图与其反射之间的间隙,以像素(或在 Retina 显示设备上的点)衡量。默认为 4 像素。
@property (nonatomic, assign) CGFloat reflectionScale;
反射相对于视图的高度。默认为 0.5(视图高度的一半)。
@property (nonatomic, assign) CGFloat reflectionAlpha;
反射的不透明度。默认为 0.5(50% 不透明)。
@property (nonatomic, assign) BOOL dynamic;
在动态模式和静态模式之间切换。有关模式之间差异的解释,请参阅'性能'。默认为'NO'(静态模式)。
- (void)update;
更新会重绘视图的反射。如果动态属性设置为'YES',则不必手动调用update
,因为每当反射的任何属性更改或视图大小变化时,都会自动调用它。如果将动态设置为'NO',则可能需要调用update
来重绘反射以匹配新内容。
要使用ReflectionView,只需将您想要反射的视图作为ReflectionView实例的子视图添加,它们将被自动镜像。您还可以从ReflectionView派生子类以创建新视图。
请注意,为了正确工作,ReflectionView实例必须禁用clipToBounds
。
获取ReflectionView良好性能的秘诀是使用正确的绘制模式。在动态模式下,当内容更改时,反射会自动更新。这对于经常更改或包含动画的内容来说很好,但它会产生每帧的性能开销。
对于不经常更改的内容,将动态属性设置为'NO'以获得更好的性能。在禁用动态模式时,如果内容更改,您需要手动调用update
方法来更新反射。
版本 1.2
版本 1.1
版本 1.0