内容简介:开发过程中经常遇到今天的文章和大家分享一下解决这种问题的代码注意:
开发过程中经常遇到 UIButton
点击区域太小 又不想 改动按钮的大小.
今天的文章和大家分享一下解决这种问题的代码
实现思路
hitTest:
第一种方式
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let biggerButtonFrame = theButton.frame.insetBy(dx: -30, dy: -30) // 1
if biggerButtonFrame.contains(point) { // 2
return theButton // 3
}
return super.hitTest(point, with: event) // 4
}
-
- 让theButton的 x 扩大 30, y 扩大 30 (正数为缩小 负数为放大. 然后宽高 分别是2 30和 2 30)
-
- 判断点击的位置是否在放大完的frame内.
-
- 如果是 就返回button
-
- 不是的话让事件继续传递
注意: 这里没判断 theButton.alpha == 0 和 theButton.userInterface.. == YES 还有它是否可见之类的,请自行判断
第二种方式
复写UIView的point:方法
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let biggerFrame = bounds.insetBy(dx: -30, dy: -30)
return biggerFrame.contains(point)
}
OC的版本是这样
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
//这里写上
CGRectInset(<#CGRect rect#>, <#CGFloat dx#>, <#CGFloat dy#>)
...
}
但是 第二种方式 其实 是 hitTest:方法调用之前UIView的判断,它判断当前点击的point是否在这个UIView上.
不过 还是推荐第一种方式
核心代码
其实 最核心的代码是
CGRectInset(<#CGRect rect#>, <#CGFloat dx#>, <#CGFloat dy#>)
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy)是以rect为中心,根据dx和dy来实现缩小。
如果dx 和 dy是负数 则放大 ,正数则缩小
但是大家可能很疑惑 那宽度和高度怎么 缩小放大
首先: 我们明确 这个API的含义 只要传入正数 它就缩放 那么 宽高也会适当前传入的dx和dy来决定 缩放比
因为是中心点缩放 所以宽高 要 X 2 ,因为有两侧嘛,左侧缩小30右侧也需要缩小30,上部和底部是一样的.
大家可自行查阅google看下
全文完
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Radware:利用安全扩大企业业务
- 有关扩大机器学习规模的五个启发
- VMware收购开源应用库Bitnami扩大多云战略
- Python 扩大领先优势,其中 PyTorch 仅占 6.4%
- 威胁快报|ProtonMiner挖矿蠕虫扩大攻击面,加速传播
- 威胁预警 | ProtonMiner挖矿蠕虫扩大攻击面加速传播
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UML基础与Rose建模案例
吴建 / 人民邮电出版社 / 2004-10 / 29.00元
《UML 基础与Rose建模案例》介绍了用UML(统一建模语言)进行软件建模的基础知识以及Rational Rose工具的使用方法,其中,前8章是基础部分,对软件工程思想、UML的相关概念、Rational Rose工具以及RUP软件过程等进行了详细的介绍;后3章是案例部分,通过3个综合实例,对UML建模(以Rose为实现工具)的全过程进行了剖析;最后的附录中给出了UML中常用的术语、标准元素和元......一起来看看 《UML基础与Rose建模案例》 这本书的介绍吧!