別のUIImageviewの現在の回転に応じてアイコンを回転させる必要があります。そのために私は1つのUIImageViewを持っています。その動きは回転ユーザージェスチャーによって制御されます。私はまた、適切に回転する必要があるアイコンを含むUIViewを持っています。このUIViewは常にUIImageviewとまったく同じ位置と回転を持ちます。別のUIImageview回転に応じてUIImageviewを回転させます。
グラフィカルこれは私が何をする必要があるかです:
私はこのコードの動作を管理:
私は次のコードでジェスチャーを管理:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
origin = (touches.first?.locationInView(self.view))!
xOffSet = CGVector(dx:(origin.x)-rotateImageView.center.x, dy:(origin.y) - rotateImageView.center.y)
startingAngle = atan2(xOffSet.dy,xOffSet.dx)
//save the current transform
tempTransform = rotateImageView.transform
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first
if touch!.view === rotateImageView || touch!.view === viewIcons {
let touchPoint = touches.first?.locationInView(self.view)
yOffSet = CGVector(dx:touchPoint!.x - rotateImageView.center.x, dy:touchPoint!.y - rotateImageView.center.y)
let angle = atan2(yOffSet.dy,yOffSet.dx)
let deltaAngle = angle - startingAngle!
rotateImageView.transform = CGAffineTransformRotate(tempTransform, deltaAngle)
viewIcons.transform = CGAffineTransformRotate(tempTransform, deltaAngle)
rotateIconsWithImageView (ivClock , angle: deltaAngle)
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
startingAngle = nil
}
//reset in case drag is cancelled
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
rotateImageView.transform = tempTransform
startingAngle = nil
}
このコードは、ユーザーが画面の別のセクションでジェスチャーを開始したときに発生する別の問題を防ぎます。私はtouchesMoved上の最後の命令として起動し、私はこの機能を使用するアイコンがあれば回転のためRotation gesture produces undesired rotation
:
func rotateIconsWithImageView (imageview:UIImageView , angle: CGFloat) {
imageview.transform = CGAffineTransformRotate(tempTransform, -angle)
}
これはあなたのように(通常は正常に動作の詳細な情報は、この別のstackoverflowのスレッド上で見ることができます私がタッチエリアを変更せずにジェスチャーを開始すれば、gifを参照してください)。しかし、ユーザーがタッチ領域を変更した場合は、回転が正しくないため、変換に使用されていないので、正確に何をするのかわかりません。あなたのtempTransform
を取り除く事前
しかし、これは他の質問とまったく同じ問題です。私が前に言ったように、あなたの全体の「tempTransform」は完全に不要です。それはまた間違っています、そして今、事実はあなたをかむために戻ってきています。 – matt
あなたはこれの完全なコードを私に提供することができますか? –