正文
iOS长按控件
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
前言
网上看到一个button的长按控件效果不错,一个菱形从中间向两边增大,研究了下
原理
上图红色是控件上面放了视图,从上到下分别是view,normalLable,highlightLabel,button
其中View是顺时针旋转了45度
通过点击控件触发里面的按钮的监听事件
按下没有松手:增大view的高度,改变两个label的透明度
抬起 :缩小view的高度,改变两个label的透明度
后面设置超出父视图不显示就可以把多余的黑色隐藏了,实现了中心向外面扩散
部分代码:
长按监听
- (void)buttonTouchDownAndDragEnter {
NSLog(@"长按不松"); [self removeShowViewAndLabelLayer];
[UIView animateWithDuration:(self.toEndDuration <= ? TIME_END_DURATION : self.toEndDuration)
animations:^{
[self showShowView];
} completion:^(BOOL finished) {
if (finished == YES) {
self.isEND = YES;
}
}];
}
部分方法
- (void)showShowView {
self.showView.bounds = CGRectMake(, , SHOW_VIEW_WIDTH,
(self.animationWidth <= ? SHOW_VIEW_WIDTH : self.animationWidth));
self.showView.alpha = ; self.normalLabel.alpha = .f;
self.highlightLabel.alpha = .f; } //隐藏showView,改变普通和高亮状态 - (void)hiddenShowView {
self.showView.bounds = CGRectMake(, , SHOW_VIEW_WIDTH, );
self.showView.alpha = ; self.normalLabel.alpha = .f;
self.highlightLabel.alpha = .f; } //移除之前的动画
- (void)removeShowViewAndLabelLayer {
self.showView.bounds = ((CALayer *)self.showView.layer.presentationLayer).bounds;
self.showView.alpha = ((CALayer *)self.showView.layer.presentationLayer).opacity; self.normalLabel.alpha = ((CALayer *)self.normalLabel.layer.presentationLayer).opacity;
self.highlightLabel.alpha = ((CALayer *)self.highlightLabel.layer.presentationLayer).opacity; // 移除之前的动画状态
[self.showView.layer removeAllAnimations];
}
demo链接:http://pan.baidu.com/s/1eRckm4q