欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【原】UIView实现点击着重效果的解决方案

发布时间:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【原】UIView实现点击着重效果的解决方案 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

  我们知道,在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 = 1; } -(void)itemTouchedDown:(MyLauncherItem *)item {item.imageView,alpha = 0.5; } - (void)itemTouchedUpInside:(MyLauncherItem *)item {item.imageView.alpha = 1; }
- (void)itemTouchedCancel:(MyLauncherItem *)item {item.imageView.alpha = 1; }  

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

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

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

转载于:https://www.cnblogs.com/wengzilin/p/3301862.html

总结

以上是生活随笔为你收集整理的【原】UIView实现点击着重效果的解决方案的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。