画像を別の画像にドラッグアンドドロップするコードがあります。ポートレートモードで画像を横にドラッグ&ドロップすると、画像が表示されません。
import Foundation
import UIKit
class DragImg: UIImageView {
var originalPosition: CGPoint!
var dropTarget: UIView?
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
originalPosition = self.center
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let position = touch.locationInView(self.superview)
self.center = CGPointMake(position.x, position.y)
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first, let target = dropTarget {
let position = touch.locationInView(self.superview)
if CGRectContainsPoint(target.frame, position) {
let notif = NSNotification(name: "onTargetDropped", object: nil)
NSNotificationCenter.defaultCenter().postNotification(notif)
}
}
self.center = originalPosition
}
}
これはうまく動作しますが、私は風景モードに変更して、画像をドラッグ&ドロップしようとした場合、システムは、先の画像の上にあるものとして画像を認識しません。あなたはなぜ私に説明し、可能な解決策を指摘できますか?
は、ランドスケープモードでの通話をtouchesMovedたのですか? –
はい、そうです。 CGRectContainsPoint(target.frame、position){ if notif = NSNotification(名前: "onTargetDropped"、オブジェクト:なし) NSNotificationCenter.defaultCenter()は次の条件がtrueを返すので、問題はtouchesEndedにあります。 .postNotification(notif) } ' target.frameとpositionを出力しました。結果は です。位置:(-254.0,169.5) Target.frame:(122.0,44.0,423.0,277.0)。 –
'self'と' target'は同じ 'superview'を持っていますか? –