簡體   English   中英

無限奧特萊斯

[英]Infinite Outlets

嗨,我正在制作一個應用,您可以在其中用小玩意裝飾聖誕樹。我已經編寫了代碼,可以在視圖中拖動它,但是我用盡了小玩意,因此我可以制作很多小玩意聖誕樹。 我已經嘗試過多次復制一個小玩意兒,但是隨后將它們全部添加到了代碼中,但它不起作用,因此將它們全部拖到了一起。 如果您在圖片中看它有擺設,但我希望它拖一個,但仍然要放一個

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)

    }

}

如果要添加可變數量的裝飾作為子視圖,並希望保留對它們的引用,則只需為其提供一個數組,例如

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
        }
    }

}

產生:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM