【原】UIView实现点击着重效果的解决方案
2024-10-13 17:43:40
我们知道,在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秒最有效果就不错了。
我的办法比较土,如果有更好的方法可以留言交流一下。
最新文章
- HTTPS Web配置举例
- 一个crackme的分析
- MVC 实体字段自定义验证
- db2常用函数(1)
- the server responded with a status of 404 (Not Found)
- mongodb的常用操作(二)
- itunes备份文件解析入门
- PyCharm 2016.1 for Mac 激活方法分享
- javascript获取整数随机数
- select中的文字垂直居中的问题
- CentOS上安装Git服务器
- HTTP网络协议与手写Web服务容器
- 2018-2019-1 20189201 《LInux内核原理与分析》第七周作业
- python模块与路径
- 【BZOJ】 1041: [HAOI2008]圆上的整点
- 构造器引用和直接用new创建对象区别
- 设计模式_策略模式_在Spring中的应用
- 双网卡设置(转:https://www.cnblogs.com/visionfeng/p/5825078.html)
- 【Leetcode】292. Nim游戏
- SpringBoot------Eclipce配置Spring Boot