【发布时间】:2016-07-26 02:04:53
【问题描述】:
我有一个 UIScrollView,其中包含 n 个占位符 UIImageView。下面我有一个包含 10 个图像的 StackView,用户将从中选择并将图像拖动到上面的特定占位符图像视图。我已经实现了 PanGesture 并且效果很好,但是,我正在努力解决如何检测可拖动图像何时在占位符图像的范围内。特别是因为它在滚动视图中。我能够得到一些与可拖动视图的 center.X 和 center.Y 一起使用的功能,然后将这些值与它们的占位符的相对值进行比较,但它没有按预期工作。从我所见,拖动的 X 和 Y 坐标仅适用于实际的父 UIView。因此,当图像被拖入滚动视图时,X 值不一定对齐,如果列表很长,其中一些占位符图像 X 坐标可能是 2000+。看看下面的代码,让我知道你的想法和建议。谢谢!
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
if recognizer.state == UIGestureRecognizerState.Began {
originalViewLocation = recognizer.view!.center
}else if recognizer.state == UIGestureRecognizerState.Ended {
for placeHolderView in playerImages{
if ((recognizer.view!.center.x < (placeHolderView.center.x + (placeHolderView.frame.width / 2)) && recognizer.view!.center.x > placeHolderView.frame.origin.x)){
if recognizer.view!.center.y < (stackView.center.y + stackView.frame.height / 2){
let chosenImage = recognizer.view! as! UIImageView
placeHolderView.image = chosenImage.image
}
}else{
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: {
recognizer.view!.center = self.originalViewLocation
}, completion: { finished in
})
}
}
}
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPointZero, inView: self.view)
print("X: \(recognizer.view!.center.x)")
print("Y: \(recognizer.view!.center.y)")
}
playerImages 数组将 UIImageViews 存储在滚动视图中。
【问题讨论】:
标签: ios swift uiscrollview uiimageview