我已经尝试了太多的方程式来得到正确的答案,可能是错误的代码或我对这个想法的理解。但是,这是我的代码:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let coord = touch.location(in:view)
self.linegu.transform = CGAffineTransform.init(rotationAngle: atan((coord.y - (self.view.center.y + (self.view.center.y)/2.5)) / (coord.x - self.view.center.x)))
}
}
linegu
是我正在使用的UIImageView
,我使用此代码将其放置在视图的中间位置:
let Ypos = (self.view.center.y/2.5);
self.linegu.center = self.view.center
self.linegu.center.y = (self.view.center.y + Ypos)
答案 0 :(得分:1)
图像视图所在的位置并不重要。你应该扔掉你的魔法数字&#34; 2.5。你是在暗示这一点。
假设arrow
是图像视图,它开始生命水平,箭头指向右侧。并假设背景视图上有一个轻击手势识别器。 (为简单起见,我们使用轻敲手势识别器;看起来您可能最终想要使用平移手势识别器。但是现在,让我们开始使用它。)
接下来是点击手势的动作处理程序的外观:
let c = self.arrow.center
let p = t.location(in: self.arrow.superview)
let angle = atan2(p.y - c.y, p.x - c.x)
self.arrow.transform = CGAffineTransform(rotationAngle:angle)
就这么简单。
答案 1 :(得分:0)
为什么要使用这个奇怪的公式?
CGAffineTransform.init(rotationAngle: atan((coord.y - (self.view.center.y + (self.view.center.y)/2.5)) / (coord.x - self.view.center.x)))
这个2.5
分隔符来自哪里?
使用.center
或.frame
定位UIImageView
怎么样?
像:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let location = touch.location(in: view)
imageView.center = location // may need to apply some offset here, depending on where exactly the arrow points in the arrow image
}
}