2016-08-10 10 views
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 
      } 
     } 
    } 
} 
+1

'EXC_BAD_INSTRUCTION(コード= exc_I386_INVOP、サブコード= 0x0の)'正常'nil'値を持つオプションにアクセスしようとすると発生します。あなたの場合は 'UIImageView! 'と宣言された' image' UIImageViewを使用しようとしたときに発生します。つまり、 'nil'になることがあります。私はこれがあなたの問題だと思っています。つまり、 'image'に' center'値を設定しようとしていますが、何らかの理由で 'image'が' nil'です。だから、考慮すべき点が2つあります。「イメージ」は何にならないのですか?あなたのxibに正しく接続されていますか?それは他の場合におそらく働いていますか? – pbodsk

+0

私は、アプリケーションがviewDidLoad()でロードされたときに、xとy座標をコンソールに表示することで値をチェックしました。ただし、値は(x:0.0、y:0.0)です。 しかし、image.center = imagePositionを "image.center = CGPointMake(image.frame.origin.x、image.frame.origin.y)"に変更しました。この結果、画像が画面から飛び出すようになります。開始座標に問題があるはずです...私はそれが何であるか把握できません。 – Jake2Finn

答えて

0

...これを行う方法を知らない私は、この問題を自分で解決し、新しいクラスを追加し、セットを介して変数を渡すとメソッドを取得します:

CLASS:

import UIKit 

class Origin { 

var positionOrigin: CGPoint! 

    func setImageOrigin(Image: UIImageView) { 
     positionOrigin = Image.center 
    } 

    func getImageOrigin() -> CGPoint { 
     return positionOrigin 
    } 
} 

ビューコントローラ:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var correctField: UIImageView! 
    @IBOutlet weak var image: UIImageView! 

    var imageOrigin = Origin() 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     imageOrigin.setImageOrigin(image) 

    } 

    @IBAction func handlePan(sender:UIPanGestureRecognizer) { 

     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) 
      sender.setTranslation(CGPointZero, inView: self.view) 

     } 

     if sender.state == UIGestureRecognizerState.Ended { 

      if correctField.frame.contains(sender.view!.center){ 
       print("Correct") 

      } else{ 

       image.center = imageOrigin.getImageOrigin() 

      } 
     } 
    } 
} 
関連する問題