How to update NSImageView using NSSlider?

淺唱寂寞╮ 提交于 2019-12-13 09:25:14

问题


I have an NSSlider in FirstViewController. I have 12 NSImageViews in SecondViewController. I'd like to move a slider in first window and shuffle images in these 12 views in second window.

How to update these NSImageViews every time when moving the slider?

SecondViewController

var imagesQty = 100  

override func viewWillAppear() {

    super.viewWillAppear()

    //let arrayOfViews: [NSImageView] = [view01,...view12]

    for view in arrayOfViews {
        let i = Int(arc4random_uniform(UInt32(imagesQty-1)))
        let image = NSImage(data: try Data(contentsOf: photos[i]))
        view.image = image
    }
}

ViewController

@IBOutlet weak var slider: NSSlider!

@IBAction func segueData(_ sender: NSSlider) {
    self.performSegue(withIdentifier: .secondVC, sender: slider)
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if segue.identifier! == .secondVC {
        if let secondViewController =
            segue.destinationController as? SecondViewController {
            secondViewController?.imagesQty = slider.integerValue 
        }
    }
}

回答1:


First of all be aware that any move of the slider performs a new segue. To avoid that declare a boolean property which is set when the segue is performed the first time and could be reset after the second view controller has been dismissed.

To update the value in the second view controller keep the reference and call a method

Actually with this code you don't need the slider IBOutlet

class ViewController: NSViewController {


    var secondControllerIsPresented = false
    var secondController : SecondViewController?

...


    @IBAction func segueData(_ sender: NSSlider) {

        if !secondControllerIsPresented {
            self.performSegue(withIdentifier: .secondVC, sender: sender)
            secondControllerIsPresented = true
        } else {
            secondController?.updateArray(value: sender.integerValue)
        }
    }

    override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        if let identifier = segue.identifier, identifier == .secondVC {
            let secondViewController = segue.destinationController as! SecondViewController
            secondController = secondViewController
            let slider = sender as! NSSlider
            secondViewController.imagesQty = slider.integerValue
        }
    }

...

class SecondViewController: NSViewController {

...


   func updateArray(value : Int) {
       print(value)
   }

Honestly I would use a button to perform the segue and move the slider into the second view controller. To shuffle the array use an Array extension and as view an NSCollectionView rather than a bunch of image views



来源:https://stackoverflow.com/questions/49524384/how-to-update-nsimageview-using-nsslider

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!