2017-07-04 20 views
0

我注意到一个问题,即调整视图的大小,但边界看起来不会改变(所以在捏住一个视图之后,您必须使用UIView的边缘来捏进一步)一旦调用UIPinchGestureRecognizer就更改UIView的边界

@IBAction private func handlePinch(_ sender: UIPinchGestureRecognizer) { 
    if let view = sender.view { 
     view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale) 
     sender.scale = 1 
    } 
} 

我发现了一个可能的答案计算器是iphone uiview - resize frame to fit subviews了一个扩展,调整大小以适应子视图,但在对象的行为没有明显的差异。

@IBAction private func handlePinch(_ sender: UIPinchGestureRecognizer) { 
    if let view = sender.view { 
     view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale) 
     sender.scale = 1 
    } 
    self.resizeToFitSubviews() 
} 


extension UIView { 
func resizeToFitSubviews() { 
    let subviewsRect = subviews.reduce(CGRect.zero) { 
     $0.union($1.frame) 
    } 
    let fix = subviewsRect.origin 
    subviews.forEach { 
     $0.frame.offsetBy(dx: -fix.x, dy: -fix.y) 
    } 
    frame.offsetBy(dx: fix.x, dy: fix.y) 
    frame.size = subviewsRect.size 
} 

如何使捏(最终handleRotate函数具有相同的问题)工作正确地调整边界?

回答

0

为人们寻找答案,这样真的比较难找到。 Rishabh与2011年的一篇帖子相关,没有任何解释,也没有做出进一步的修改就无法工作。

如果要更改边界,你不再需要申请 view.transform.scaledBy(X:sender.scale,Y:sender.scale)

而是需要使用类似的代码

改变边界
 self.bounds = self.bounds.applying(view.transform.scaledBy(x: sender.scale, y: sender.scale)) 

所以完整的代码可以是:

@IBAction private func handlePinch(_ sender: UIPinchGestureRecognizer) { 
    if let view = sender.view { 
     self.bounds = self.bounds.applying(view.transform.scaledBy(x: sender.scale, y: sender.scale)) 
     sender.scale = 1 
    } 
     self.resizeToFitSubviews() 
} 
相关问题