使用 UIPinchGestureRecognizer 调整 UIView 的大小
Posted
技术标签:
【中文标题】使用 UIPinchGestureRecognizer 调整 UIView 的大小【英文标题】:Resizing UIView using UIPinchGestureRecognizer 【发布时间】:2016-11-30 05:37:16 【问题描述】:我有这段代码可以处理捏合手势并获取比例值并传递给updateViewBounds
函数。
func pinchedOnView(gesture : UIPinchGestureRecognizer)
switch gesture.state
case UIGestureRecognizerState.began:
self.resizableView.updateViewBounds(scale: gesture.scale , initialBounds: self.resizableView.bounds)
case UIGestureRecognizerState.changed :
self.resizableView.updateViewBounds(scale: gesture.scale, initialBounds: self.resizableView.bounds)
default : ()
所以这个函数以输入的比例找到对应的帧并更新视图帧。
public func updateViewBounds(scale : CGFloat,initialBounds : CGRect)
let zt = CGAffineTransform(scaleX: scale, y: scale)
let tempBounds = initialBounds.applying(zt)
if tempBounds.width < UIScreen.main.bounds.width - 20 && tempBounds.height < UIScreen.main.bounds.height - 20
if tempBounds.height > 300 || tempBounds.width > 300
self.bounds = tempBounds
else
是的,这个功能可以正常工作,但速度非常快。是的,因为我们知道UIPinchGestureRecognizer
返回值的每一个小数部分。
我希望用户看到调整大小的非常合适的视图,我不想为每个值的分数更新视图。有什么想法吗?
【问题讨论】:
你试过.ended
和gesture.state
的情况吗
【参考方案1】:
问题是由于您在每个子序列步骤中使用相对于原始视图边界的相对比例来缩放视图边界的缩放版本。
我认为您需要将目标视图的初始视图边界存储在.begin
并使用此值来调用updateViewBounds
。另一种方法是在手势处理函数的末尾设置gesture.scale = 1.0
。
【讨论】:
以上是关于使用 UIPinchGestureRecognizer 调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)