当前位置: 首页 > news >正文

iOS长按控件

前言

网上看到一个button的长按控件效果不错,一个菱形从中间向两边增大,研究了下

原理

上图红色是控件上面放了视图,从上到下分别是view,normalLable,highlightLabel,button

其中View是顺时针旋转了45度

通过点击控件触发里面的按钮的监听事件 

按下没有松手:增大view的高度,改变两个label的透明度

抬起 :缩小view的高度,改变两个label的透明度

后面设置超出父视图不显示就可以把多余的黑色隐藏了,实现了中心向外面扩散

部分代码:

长按监听

 1 - (void)buttonTouchDownAndDragEnter {
 2     NSLog(@"长按不松");
 3     
 4     [self removeShowViewAndLabelLayer];
 5     [UIView animateWithDuration:(self.toEndDuration <= 0 ? TIME_END_DURATION : self.toEndDuration)
 6                      animations:^{
 7                          [self showShowView];
 8                      } completion:^(BOOL finished) {
 9                          if (finished == YES) {
10                              self.isEND = YES;
11                          }
12                      }];
13 }

部分方法

- (void)showShowView {
    self.showView.bounds = CGRectMake(0, 0, SHOW_VIEW_WIDTH,
                                      (self.animationWidth <= 0? SHOW_VIEW_WIDTH : self.animationWidth));
    self.showView.alpha  = 1;
    
    self.normalLabel.alpha    = 0.f;
    self.highlightLabel.alpha = 1.f;
    
}

//隐藏showView,改变普通和高亮状态

- (void)hiddenShowView {
    self.showView.bounds = CGRectMake(0, 0, SHOW_VIEW_WIDTH, 0);
    self.showView.alpha  = 0;
    
    self.normalLabel.alpha    = 1.f;
    self.highlightLabel.alpha = 0.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

 

转载于:https://www.cnblogs.com/hxwj/p/5027919.html

相关文章:

  • ftp备份服务器数据完整性检查并实现短信告警功能的shell
  • 二叉树遍历算法之二:中序遍历
  • The network connection was lost.
  • 网络编程使用代理方法 , 简化请求和响应
  • jsp的标签和EL表达式
  • DEBUG命令详细说明
  • 网页中多个图标在一张图片上,使用css将各图标显示
  • C++容易忽略的细节
  • vim+ctags+cscope 常用技巧和命令
  • IT公司100题-13-求链表中倒数第k个结点
  • Log aggregation has not completed or is not enabled.
  • linux安装scikit-learn
  • JavaMail:搜索、过滤接收邮件,删除邮件
  • 对JS继承的一点思考
  • 成为一名优秀的Developer的书单
  • ----------
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Git的一些常用操作
  • Java比较器对数组,集合排序
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 技术胖1-4季视频复习— (看视频笔记)
  • 解析带emoji和链接的聊天系统消息
  • 蓝海存储开关机注意事项总结
  • 力扣(LeetCode)56
  • 微信小程序设置上一页数据
  • 移动端唤起键盘时取消position:fixed定位
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 走向全栈之MongoDB的使用
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • (11)MATLAB PCA+SVM 人脸识别
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (力扣题库)跳跃游戏II(c++)
  • (三)uboot源码分析
  • (十一)手动添加用户和文件的特殊权限
  • (四)库存超卖案例实战——优化redis分布式锁
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 无限分类
  • .NET开发者必备的11款免费工具
  • .NET开源快速、强大、免费的电子表格组件
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET企业级应用架构设计系列之技术选型
  • .NET下的多线程编程—1-线程机制概述
  • @Autowired注解的实现原理
  • @EnableConfigurationProperties注解使用
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [Android]如何调试Native memory crash issue
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [AutoSAR系列] 1.3 AutoSar 架构