私は、n個のプレースホルダUIImageViewを含むUIScrollViewを持っています。その下に私は、ユーザが選択し、上記の特定のプレースホルダ画像ビューに画像をドラッグする10枚の画像を含むStackViewを持っています。私はPanGestureを実装していますが、うまくいきますが、ドラッグ可能なイメージがプレースホルダイメージの境界内にあるときを検出する方法には苦労しています。特にスクロール表示になっているためです。ドラッグ可能なビューのcenter.Xとcenter.Yを使って、その値をプレースホルダの相対的な値と照らし合わせて調べることができましたが、希望通りには機能しませんでした。そして、私が見ることができるから、XとY座標はドラッグから、実際の親UIViewにのみ適用されます。したがって、画像をスクロールビューにドラッグすると、X値が必ずしも整列しているとは限りません。リストが長い場合、プレースホルダ画像のX座標の一部は2000+になることがあります。以下のコードを見て、あなたの考えや提案を教えてください。ありがとう!別のUIImageViewにドラッグUIImageViewとドロップ
@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を格納します。
ちょっと@thevalyreangroup、私は同じことが必要でした。いくつかのデモプロジェクトを共有できますか? –
確かに、私は今日後で何かを置くでしょう。 – TheValyreanGroup