受 Google 材料设计 Paper 主题启发的平面视图。
请参阅包含的 变更记录文件。
BFPaperView 是 UIView 的子类,其行为与 Google 材料设计实验室的新论文视图非常相似。所有动画都是异步执行的,在子图层上执行。BFPaperViews 立即工作,具有令人愉悦的默认行为,但它们很容易自定义!此视图的几乎所有方面都可以自定义!
BFPaperViews 有两种类型,平面或凸起。平面 BFPaperViews 没有阴影,并且在所有动画过程中都将保持平面。平面视图可以是透明的,在这种情况下,当触摸时会稍微淡化背景。凸起 BFPaperViews 具有跟随触摸移动的下阴影动画,给人一种随着触摸而升高 sensations。凸起的 BFPaperViews 与透明背景颜色一起看起来不太好,因为这将暴露其阴影层。
默认情况下,BFPaperViews 使用“智能颜色”,这将匹配触摸圆圈和背景淡化颜色以匹配 titleLabel
的颜色。您可以通过设置属性将智能颜色设置为 NO
以关闭它,.usesSmartColor
。如果您禁用智能颜色,则触摸圆圈和背景颜色淡化都默认使用灰色。您可以通过 .tapCircleColor
和 .backgroundFadeColor
设置自己的颜色。请注意,设置这些禁用智能颜色。
UIColor *shadowColor
凸起按钮的阴影 UIColor。建议 alpha 值为 1,因为 shadowOpacity 会覆盖此颜色的 alpha 值。
CGFloat loweredShadowOpacity
表示凸起的按钮降低(空闲状态)时阴影透明度的 CGFloat 值。默认值为
0.5f
。
CGFloat loweredShadowRadius
一个 CGFLoat,表示底座按钮在按下(空闲)时的阴影半径。默认值为
1.5f
。
CGSize loweredShadowOffset
一个 CGSize,表示底座按钮在按下(空闲)时阴影的偏移量。默认值为
(0, 1)
。
CGFloat liftedShadowOpacity
一个 CGFLoat,表示底座按钮在抬起(触摸按下时)的阴影不透明度。默认值为
0.5f
。
CGFloat liftedShadowRadius
一个 CGFLoat,表示底座按钮在抬起(触摸按下时)的阴影半径。默认值为
4.5f
。
CGSize liftedShadowOffset
一个 CGSize,表示底座按钮在抬起(触摸按下时)阴影的偏移量。默认值为
(2, 4)
。
CGFloat touchDownAnimationDuration
一个 CGFLoat,表示触摸按下时发生的动画的持续时间。默认值为
0.25f
秒。(加油钢人)
CGFloat touchUpAnimationDuration
一个 CGFLoat,表示触摸抬起时发生的动画的持续时间。默认值为
2 * touchDownAnimationDuration
秒。
CGFloat tapCircleDiameterStartValue
一个 CGFLoat,表示触摸圆出现并开始生长之前的直径。默认值为
5.f
。
CGFloat tapCircleDiameter
表示触摸圆直径的 CGFloat 值。默认情况下,它将是
MAX(self.frame.width, self.frame.height)
的结果。tapCircleDiameterFull
会计算一个始终填满整个视图的圆。任何小于或等于tapCircleDiameterFull
的值将使用默认值。还有可用的常量:tapCircleDiameterLarge
,tapCircleDiameterMedium
和tapCircleDiameterSmall
。
CGFloat tapCircleBurstAmount
表示当触摸圆爆炸时,我们应当增加直径多少的 CGFloat 值。默认值为
100.f
。
CGFloat cornerRadius
被子层传播的角半径。默认值为
0
。
UIColor *tapCircleColor
使用此 UIColor 作为您触摸位置出现的圆圈的颜色。注意:设置此颜色会取消触摸圆的“智能颜色”功能。建议使用小于
1
的 Alpha 值。
UIColor *backgroundFadeColor
使用此 UIColor 作为要淡化的清晰背景颜色。注意:设置此颜色会取消背景淡化的“智能颜色”功能。建议使用小于
1
的 Alpha 值。
BOOL rippleFromTapLocation
将此标志设置为
YES
以使触摸圆从触摸点开始扩散。如果将其设置为NO
,则触摸圆将始终从视图中心开始扩散。默认值为YES
。
BOOL rippleBeyondBounds
将此标志设置为
YES
以使触摸圆超出视图边界扩散。如果将其设置为NO
,则触摸圆将被裁剪为视图的边界。默认值为NO
。
(nonatomic, copy) void (^)(CGPoint location))
如果触摸抬起在视图边界内,将运行这个块。基本上将视图变成一个按钮。
BOOL isRaised
将此标志设置为
YES
以将平面视图变为凸起,或设置为NO
以将凸起视图变为平面。如果您使用了一个提供的自定义初始化器,您可能应该保持此参数不变。如果您通过故事板或 IB 实例化并且想要从凸起变为平面,这是您的参数!默认值为YES
。
具有阴影,因此清晰的背景看起来会很傻。它只有一个触摸圆颜色。没有背景淡化。
没有阴影,因此清晰的背景看起来很好。如果背景是透明的,它也具有背景渐变色,有助于可视化视图及其框架。
将BFPaperView头文件和实现文件添加到您的项目中。(.h & .m)
BFPaperView *flatPaperView = [[BFPaperView alloc] initWithFrame:rect raised:NO];
BFPaperView *raisedPaperView = [[BFPaperView alloc] initWithFrame:rect raised:YES];
BFPaperView *raisedPaperViewWithATapHanlder = [[BFPaperView alloc] initWithFrame:rect raised:YES tapHandlerBlock:someBlockToRunOnTapUp];
BFPaperView *paperView = [[BFPaperView alloc] initWithFrame:CGRectMake(116, 468, 86, 86) raised:YES tapHandlerBlock:someBlockToRunOnTapUp];
paperView.backgroundColor = [UIColor colorWithRed:0.3 green:0 blue:1 alpha:1];
paperView.tapCircleColor = [UIColor colorWithRed:1 green:0 blue:1 alpha:0.6]; // Setting this color overrides "Smart Color".
paperView.cornerRadius = paperView.frame.size.width / 2;
paperView.rippleFromTapLocation = NO;
paperView.rippleBeyondBounds = YES;
paperView.tapCircleDiameter = MAX(paperView.frame.size.width, paperView.frame.size.height) * 1.3;
[self.view addSubview:paperView];
BFPaperView使用MIT许可证
请参阅包含的LICENSE文件。