我们知道,在IOS中UIButton UIControl都有一个默认的选中效果,即点中后会图标会变暗,移开后又恢复正常。如何让UIView UIImageView等这些普通的view也实现同样的效果呢?

  最近的一个项目里面,需要实现一个类似iPad/iPhone的主界面效果,但是不同的是,每个item里面显示图片的都必须是UIImageView,因为icon的图片是从服务端异步下载下来的。而iPad的主界面里面,显示图片的载体应该是一个Button,已经自带着重效果了。现在的任务是实现UIImageView的阴影着重效果。

  其实要实现只需往Item(item = UIImageView + UILabel)添加三个touch事件:

[item addTarget:self action:@selector(itemTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];
[item addTarget:self action:@selector(itemTouchedUpOutside:) forControlEvents:UIControlEventTouchUpOutside];
[item addTarget:self action:@selector(itemTouchedDown:) forControlEvents:UIControlEventTouchDown];
[item addTarget:self action:@selector(itemTouchedCancel:) forControlEvents:UIControlEventTouchCancel];

  下面我们用改变UImageView的alph透明度来代替阴影着重效果。阴影着重效果很简单,但点击的时候覆盖一层黑色的半透明的View的即可,而代码的位置也跟setAlpha:的位置相对应。

-(void)itemTouchedUpOutside:(MyLauncherItem *)item {
item.imagView.alpha = ;
}
-(void)itemTouchedDown:(MyLauncherItem *)item {
item.imageView,alpha = 0.5;
}
- (void)itemTouchedUpInside:(MyLauncherItem *)item {
item.imageView.alpha = ;
}
- (void)itemTouchedCancel:(MyLauncherItem *)item {
item.imageView.alpha = 1;
}
 

其中,只有touchDown才降低alhpa值,其他两个事件都是用来恢复到原先状态的。当我们触摸item时,首先被响应的是touchDown事件,然后接下来响应的是touchUpInside还是touchUpOuside要取决于手指是否移动了。增加touchCancel处理是因为有时会出现按钮按下后恢复不了原状的情况,特别是在暴力测试情况下下,用多跟手指同时滑动图标。

以上就是大体思路。若觉得着重的时间太短,可以在touchUpInside里面写个GDB的dispatch_after延时处理操作,一半只要延时0.05秒最有效果就不错了。

我的办法比较土,如果有更好的方法可以留言交流一下。

最新文章

  1. HTTPS Web配置举例
  2. 一个crackme的分析
  3. MVC 实体字段自定义验证
  4. db2常用函数(1)
  5. the server responded with a status of 404 (Not Found)
  6. mongodb的常用操作(二)
  7. itunes备份文件解析入门
  8. PyCharm 2016.1 for Mac 激活方法分享
  9. javascript获取整数随机数
  10. select中的文字垂直居中的问题
  11. CentOS上安装Git服务器
  12. HTTP网络协议与手写Web服务容器
  13. 2018-2019-1 20189201 《LInux内核原理与分析》第七周作业
  14. python模块与路径
  15. 【BZOJ】 1041: [HAOI2008]圆上的整点
  16. 构造器引用和直接用new创建对象区别
  17. 设计模式_策略模式_在Spring中的应用
  18. 双网卡设置(转:https://www.cnblogs.com/visionfeng/p/5825078.html)
  19. 【Leetcode】292. Nim游戏
  20. SpringBoot------Eclipce配置Spring Boot

热门文章

  1. css3 画圆记录
  2. WP8 SqlCE和SqlLite数据存储性能比较
  3. Android 布局之FrameLayout
  4. 工作流数据库表设计-ASP.NET
  5. 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式
  6. CentOS6.5菜鸟之旅:安装rpmforge软件库
  7. 判断Integer值相等最好不用==(未整理)
  8. springMVC注解@initbinder日期类型的属性自动转换
  9. AutoMapper配置方法
  10. Orleans 之 监控工具的使用