2017-12-29 34 views
0

こんにちは私はあなたがbaublesでクリスマスツリーを飾ることができるアプリを作っています私はビューの周りにそれをドラッグすることができるコードを書いたが、私はどのように私はそれを作るので、クリスマスツリーに置くための闘牛。私は1つのbaubleをたくさん複製することを試みましたが、それらをコードにすべて追加しました。同時に動作させていません。あなたは絵で見ればそれはそれで安物の宝石を持っていますが、私はあなたがサブビューとして装飾品の可変数を追加する場合 無限のアウトレット

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var red_bauble_1: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let gesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.wasDragged(_ :))) 
     red_bauble_1.addGestureRecognizer(gesture) 
     red_bauble_1.isUserInteractionEnabled = true 
    } 

    @objc func wasDragged (_ gesture: UIPanGestureRecognizer) { 

     let translation = gesture.translation(in: self.view) 
     let red_bauble_1 = gesture.view 

     red_bauble_1?.center = CGPoint(x: red_bauble_1!.center.x + translation.x, y: (red_bauble_1?.center.y)! + translation.y) 
     gesture.setTranslation(CGPoint.zero, in: self.view) 

    } 

} 
+3

は、私はあなたがしようとしているかを理解するためにクリスマスツリーの絵よりも多くを見るためにやる必要です行う。 – chrisz

+0

Iveはコード –

+0

を追加しました。これはなぜPythonでタグ付けされていますか? – roganjosh

答えて

1

を置くために、それはまだそこに1が、1つをドラッグしたいと望みますそれらへの参照を保持するには、それらのための配列を持っているだけです。あなたのツリーにそれらを追加し、あなたがそれらのすべてを追跡するための配列を持っているよう

var ornaments = [UIView]() // or, if they're image views, `[UIImageView]()` 

そして、あなたはその配列にあなたの装飾を追加することができます。例えば


class ViewController: UIViewController { 

    @IBOutlet weak var treeImageView: UIImageView! 
    @IBOutlet weak var ornamentToolImageView: UIImageView! 

    private var currentOrnament: UIView! 

    private var ornaments = [UIView]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let pan = UIPanGestureRecognizer(target: self, action: #selector(dragOrnamentFromToolbar(_:))) 
     ornamentToolImageView.addGestureRecognizer(pan) 
    } 

    /// Gesture for dragging ornament from toolbar on to the tree 
    /// 
    /// This creates new ornament and adds it to view hierarchy as well as to our array of `ornaments` 

    @IBAction func dragOrnamentFromToolbar(_ gesture: UIPanGestureRecognizer) { 
     let location = gesture.location(in: treeImageView) 

     switch gesture.state { 
     case .began: 
      gesture.view?.isHidden = true     // temporarily hide toolbar view so it feels like we're dragging it 
      let image = UIImage(named: "ornament")! 
      currentOrnament = UIImageView(image: image) 
      ornaments.append(currentOrnament) 
      treeImageView.addSubview(currentOrnament) 
      fallthrough 

     case .changed: 
      currentOrnament.center = location 

     case .ended, .cancelled: 
      // when done, add new pan gesture for dragging around new ornament 

      gesture.view?.isHidden = false    // restore toolbar view 
      currentOrnament.isUserInteractionEnabled = true 
      let pan = UIPanGestureRecognizer(target: self, action: #selector(dragExistingOrnament(_:))) 
      currentOrnament.addGestureRecognizer(pan) 
      currentOrnament = nil 

     default: 
      break 
     } 
    } 

    /// Gesture for dragging existing ornament 
    /// 
    /// This grabs existing and allows you to drag it around 

    @IBAction func dragExistingOrnament(_ gesture: UIPanGestureRecognizer) { 
     let location = gesture.location(in: treeImageView) 

     switch gesture.state { 
     case .began: 
      currentOrnament = gesture.view 
      fallthrough 

     case .changed: 
      currentOrnament.center = location 

     default: 
      break 
     } 
    } 

} 

もたらすこと:

enter image description here

+0

ロブは言った。私は同じことを提案しようとしていたが、彼は私にそれを打つ。 –

+0

私の店舗をそれにどのようにリンクさせるのですか? –

+2

あなたはしません。アウトレットを使用する代わりに、配列を使用してイメージビューを参照してください。 –

関連する問題