2015-08-28 120 views
2

我创建了一个具有调整大小,旋转和移动功能的UIView子类。我有一个UITextView作为子视图,必须移动,旋转和调整父级。一切工作正常,直到我旋转视图,然后调整它;子视图开始如此故障:https://gyazo.com/1341614679ada42311713cd53c1516ec(忽略旋转毛刺)调整旋转UIView的子视图的大小

是什么原因导致这个问题,它如何解决?

下面的代码我使用调整大小和旋转:

// Resizing 
func scale(recognizer: UILongPressGestureRecognizer) { 

    if recognizer.state == UIGestureRecognizerState.Changed { 

     let point = recognizer.locationInView(self) 
     var wChange = CGFloat(0.0), hChange = CGFloat(0.0) 

     wChange = point.x - self.prevPoint.x 
     let wRatioChange = wChange/bounds.size.width 

     hChange = wRatioChange * bounds.size.height 

     if abs(wChange) > 50.0 || abs(hChange) > 50.0 { 
      self.prevPoint = recognizer.locationOfTouch(0, inView: self) 
      return 
    } 

    bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width+wChange, bounds.size.height+hChange) 

    self.prevPoint = recognizer.locationOfTouch(0, inView: self) 

    update() // Updating subviews frames 
} 

func update() { 
    // resizing of other subviews 
    deleteButton.center.x = self.frame.width - deleteButton.frame.width * 0.5 
    deleteButton.frame.origin.y = 0 
    sizeButton.frame.origin.x = self.frame.width - sizeButton.frame.width 
    sizeButton.frame.origin.y = self.frame.height - sizeButton.frame.height 

    self.theTextView.frame.size = CGSize(width: self.frame.width - self.deleteButton.frame.width*2*0.66666666,height: self.frame.height - self.deleteButton.frame.height) 

    //vRotate.frame.origin.x = 0 
    //vRotate.frame.origin.y = self.frame.height - sizeButton.frame.height 
    self.theTextView.center = CGPoint(x: self.frame.width/2,y: self.frame.height/2) 
    updateTextFont(self.theTextView) 
    self.theTextView.textAlignment = NSTextAlignment.Center 

    ... 
} 

旋转功能:

func rotate(recognizer: UIPanGestureRecognizer) { 
    if recognizer.state == .Changed { 
     let ang = atan2(recognizer.locationInView(self.superview).y - center.y, recognizer.locationInView(self.superview).x - center.x) 
     print(ang) 
     let angleDiff = self.deltaAngle - ang 

     self.transform = CGAffineTransformMakeRotation(-angleDiff) 

    } 
} 

提前感谢!

+0

我想这涉及到协调而变换下。也许你应该使用CGAffineTransformScale进行缩放而不是改变框架? –

+0

此链接似乎很有用。该转换将改变坐标系,因此您需要将坐标转换回来,执行更改并重新应用转换。 http://stackoverflow.com/questions/19523487/find-frame-coordinates-after-uiview-transform-is-applied-cgaffinetransform –

回答

2

好吧,我解决了它,问题是简单的,我使用frame而不是bounds调整子视图的框架。例如:

sizeButton.frame.origin.y = self.frame.height - sizeButton.frame.height

应该

sizeButton.frame.origin.y = self.bounds.height - sizeButton.frame.height