Swift UIView每次都放错位置';s旋转
我有一把尺子(红色)和一个UIView(橙色),如下所示: 当我旋转标尺时,UIView也会旋转,但其位置与我预期的不同: 我使用Swift UIView每次都放错位置';s旋转,swift,uiview,rotation,Swift,Uiview,Rotation,我有一把尺子(红色)和一个UIView(橙色),如下所示: 当我旋转标尺时,UIView也会旋转,但其位置与我预期的不同: 我使用ui长按手势识别器旋转标尺,当我握住手指并移动时,我得到了一个角度来重新绘制标尺,它工作得很好,但不适用于ui视图 如何创建和旋转UIView: func createUIViewOutSideRuler(touchedPoint:CGPoint, notTouchedPoint:CGPoint, angle: CGFloat) -> UIView{
ui长按手势识别器
旋转标尺,当我握住手指并移动时,我得到了一个角度
来重新绘制标尺,它工作得很好,但不适用于ui视图
如何创建和旋转UIView:
func createUIViewOutSideRuler(touchedPoint:CGPoint, notTouchedPoint:CGPoint, angle: CGFloat) -> UIView{
let viewWidth = distanceFromTwoPoints(touchedPoint, notTouchedPoint)
let view = UIView(frame: CGRect(x:notTouchedPoint.x, y: notTouchedPoint.y , width: viewWidth, height: dotLineSize * 2))
view.transform = CGAffineTransform(rotationAngle: angle);
view.backgroundColor = .orange
self.addSubview(view)
return view
}
根据清扫者评论更新基础
let view = UIView(frame: CGRect(x:notTouchedPoint.x, y: notTouchedPoint.y , width: viewWidth, height: dotLineSize * 2))
let vectorToStartPoint = CGPoint(x: view.center.x - touchedPoint.x,
y: view.center.y - touchedPoint.y )
view.transform = CGAffineTransform(translationX: vectorToStartPoint.x, y: vectorToStartPoint.y)
.rotated(by: angle)
.translatedBy(x: -vectorToStartPoint.x, y: -vectorToStartPoint.y)
结果:
注意:我拖动接触点
旋转
以接触点为中心
以非接触点为中心
您需要围绕
notTouchedPoint
旋转视图。默认情况下,使用CGAffineTransform.init(rotationAngle:)
创建的旋转将围绕视图中心旋转视图
要执行此操作,请首先将视图的中心平移到起始点
,旋转它,然后再将其向后平移
let vectorToNotTouchedPoint = CGPoint(x: view.center.x - notTouchedPoint.x
y: view.center.y - notTouchedPoint.y)
view.transform = CGAffineTransform(translationX: vectorToNotTouchedPoint.x, y: vectorToNotTouchedPoint.y)
.rotated(by: angle)
.translatedBy(x: -vectorToNotTouchedPoint.x, y: -vectorToNotTouchedPoint.y)
它不起作用,我根据你的答案用结果图片更新了我的问题,假设
startPoint
是notTouchedPoint
@baole为什么你要用notTouchedPoint
/touchedPoint
替换startPoint
?当我说startPoint
时,我的意思是startPoint
参数。startPoint
参数是touchedPoint
,我只是为了更清晰的上下文而更改了名称。在我更改名称之前,我使用了与你所说的完全相同的startPoint
参数,结果是最后一张图片。rry,startPoint
应该是touchedPoint
@baole-Hmm,看起来不错。。。那我就没有主意了-(让我们等待其他人,看看他们是否能回答:-)