如何使用 NSSlider 更新 NSImageView?
How to update NSImageView using NSSlider?
我在 FirstViewController
中有一个 NSSlider
。我在 SecondViewController
中有 12 NSImageViews
。我想在第一个 window 中移动一个滑块并在第二个 window 中随机播放这 12 个视图中的图像。
如何在每次移动滑块时更新这些NSImageViews
?
第二ViewController
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
}
}
}
首先请注意,滑块的任何移动都会执行一个新的转场。为了避免声明一个布尔值 属性,它在第一次执行 segue 时设置,并且可以在第二个视图控制器被关闭后重置。
要更新第二个视图控制器中的值,请保留引用并调用方法
实际上使用此代码不需要滑块 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)
}
老实说,我会使用一个按钮来执行 segue 并将滑块移动到第二个视图控制器中。要随机排列数组,请使用 Array
扩展名并查看 NSCollectionView
而不是一堆图像视图
我在 FirstViewController
中有一个 NSSlider
。我在 SecondViewController
中有 12 NSImageViews
。我想在第一个 window 中移动一个滑块并在第二个 window 中随机播放这 12 个视图中的图像。
如何在每次移动滑块时更新这些NSImageViews
?
第二ViewController
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
}
}
}
首先请注意,滑块的任何移动都会执行一个新的转场。为了避免声明一个布尔值 属性,它在第一次执行 segue 时设置,并且可以在第二个视图控制器被关闭后重置。
要更新第二个视图控制器中的值,请保留引用并调用方法
实际上使用此代码不需要滑块 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)
}
老实说,我会使用一个按钮来执行 segue 并将滑块移动到第二个视图控制器中。要随机排列数组,请使用 Array
扩展名并查看 NSCollectionView
而不是一堆图像视图