使用 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 返回值的每一个小数部分。

我希望用户看到调整大小的非常合适的视图,我不想为每个值的分数更新视图。有什么想法吗?

【问题讨论】:

你试过.endedgesture.state的情况吗 【参考方案1】:

问题是由于您在每个子序列步骤中使用相对于原始视图边界的相对比例来缩放视图边界的缩放版本。

我认为您需要将目标视图的初始视图边界存储在.begin 并使用此值来调用updateViewBounds。另一种方法是在手势处理函数的末尾设置gesture.scale = 1.0

【讨论】:

以上是关于使用 UIPinchGestureRecognizer 调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份