【发布时间】:2016-11-12 04:41:36
【问题描述】:
我有一个自定义的DraggableView,它是UIImageView 的子类。我用相机拍照,将生成的UIImage 添加到DraggableView,然后我可以愉快地在屏幕上拖动它,如预期的那样。
现在,如果原始照片是横向拍摄的,我会使用以下方法旋转它:
if (image?.size.width > image?.size.height)
{
self.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}
当我应用此转换时,拖动行为仍然有效,但方向都错误 - 如果我向左拖动,图像会向上移动,而不是向左移动。如果我向上拖动,图像会向右移动,而不是向上移动。
我该如何解决这个问题?我想这与UIPanGestureRecognizer 绑定到未转换的视图有关?
编辑:当前UIPanGestureRecognizer处理程序:
func onPhotoDrag(recognizer: UIPanGestureRecognizer?)
{
let translation = recognizer!.translationInView(recognizer?.view)
recognizer!.view!.center = CGPointMake(recognizer!.view!.center.x
+ translation.x, recognizer!.view!.center.y + translation.y);
recognizer?.setTranslation(CGPointZero, inView: recognizer?.view)
if (recognizer!.state == UIGestureRecognizerState.Ended)
{
let velocity = recognizer!.velocityInView(recognizer?.view)
let magnitude = sqrt((velocity.x * velocity.x)
+ (velocity.y * velocity.y))
let slideMult = magnitude / 300;
let slideFactor = 0.1 * slideMult;
let finalPoint = CGPointMake(recognizer!.view!.center.x
+ (velocity.x * slideFactor),
recognizer!.view!.center.y + (velocity.y * slideFactor));
// Animate the drag, and allow the drag delegate to do its work
DraggableView.animateWithDuration(Double(slideFactor),
delay: 0, options: UIViewAnimationOptions.CurveEaseOut,
animations: { recognizer?.view?.center = finalPoint },
completion: {(_) -> Void in self.dragDelegate?.onDragEnd(self)})
} // if: gesture ended
}
【问题讨论】:
-
你能发布你的可拖动视图的 panGestureHandler 代码吗?
-
而不是 DraggableView 继承 UIImageView,使其成为 UIView 的子类,然后将旋转后的 UIImageView 添加为子类。
-
已编辑以添加处理程序。我在
DraggableView的init中进行旋转,但尝试答案中的方法没有任何区别。
标签: ios swift transform draggable