Ios 调整旋转UIView的子视图的大小
我创建了一个UIView子类,它具有调整大小、旋转和移动功能。我有一个UITextView作为子视图,它必须随父视图一起移动、旋转和调整大小。一切正常,直到我旋转视图,然后调整其大小;子视图开始出现如下故障:(忽略旋转故障) 是什么导致此问题?如何解决此问题 下面是我正在使用的调整大小和旋转的代码:Ios 调整旋转UIView的子视图的大小,ios,swift,uiview,rotation,subview,Ios,Swift,Uiview,Rotation,Subview,我创建了一个UIView子类,它具有调整大小、旋转和移动功能。我有一个UITextView作为子视图,它必须随父视图一起移动、旋转和调整大小。一切正常,直到我旋转视图,然后调整其大小;子视图开始出现如下故障:(忽略旋转故障) 是什么导致此问题?如何解决此问题 下面是我正在使用的调整大小和旋转的代码: // Resizing func scale(recognizer: UILongPressGestureRecognizer) { if recognizer.state == UIGe
// 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)
}
}
提前谢谢 好的,我解决了这个问题,问题很简单,我在调整子视图帧的大小时使用了
frame
而不是bounds
。例如:
sizeButton.frame.origin.y=self.frame.height-sizeButton.frame.height
应该是
sizeButton.frame.origin.y=self.bounds.height-sizeButton.frame.height
我想它与变换时的坐标有关。也许您应该使用CGAffineTransformScale进行缩放,而不是更改帧?此链接似乎很有用。变换将更改坐标系,因此需要将坐标转换回坐标系,进行更改,然后重新应用变换。