1
編集: プログラムがもうクラッシュしないようにコードを変更することができました。しかし、一つだけの小さな問題が動作するコード放置されていますドラッグ可能なUIImageを元の位置に戻してみましょう
あなたは私のコンソール出力で見ることができるように、origin2の座標がorigin1
1起源と同じではありません。( 268.0、241.0)origin2:(116.0、323.0)送信者ビューセンター: オプション((146.5、397.0))
だから私はのviewDidLoad(からimageOrigin1値を取得する必要があります)とそれらを使用イムFUNC handlePan(送信者:UIPanGestureRecognizer)。 私はちょうど
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var correctField: UIImageView!
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidLoad() {
super.viewDidLoad()
let imageOrigin1 = image.frame.origin
print("origin1: \(imageOrigin1)")
}
@IBAction func handlePan(sender:UIPanGestureRecognizer) {
let imageOrigin2 = image.frame.origin
let translation = sender.translationInView(self.view)
if let view = sender.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
if sender.state == UIGestureRecognizerState.Ended {
if correctField.frame.contains(sender.view!.center){
print("Correct")
sender.setTranslation(CGPointZero, inView: self.view)
} else{
print("origin2: \(imageOrigin2)")
print("sender view center: \(sender.view?.center)")
//sender.view?.center = imageOrigin
}
}
}
}
'EXC_BAD_INSTRUCTION(コード= exc_I386_INVOP、サブコード= 0x0の)'正常'nil'値を持つオプションにアクセスしようとすると発生します。あなたの場合は 'UIImageView! 'と宣言された' image' UIImageViewを使用しようとしたときに発生します。つまり、 'nil'になることがあります。私はこれがあなたの問題だと思っています。つまり、 'image'に' center'値を設定しようとしていますが、何らかの理由で 'image'が' nil'です。だから、考慮すべき点が2つあります。「イメージ」は何にならないのですか?あなたのxibに正しく接続されていますか?それは他の場合におそらく働いていますか? – pbodsk
私は、アプリケーションがviewDidLoad()でロードされたときに、xとy座標をコンソールに表示することで値をチェックしました。ただし、値は(x:0.0、y:0.0)です。 しかし、image.center = imagePositionを "image.center = CGPointMake(image.frame.origin.x、image.frame.origin.y)"に変更しました。この結果、画像が画面から飛び出すようになります。開始座標に問題があるはずです...私はそれが何であるか把握できません。 – Jake2Finn