me icon indicating copy to clipboard operation
me copied to clipboard

学习MacOS App (Part 2: Image Play)

Open nonocast opened this issue 3 years ago • 0 comments

意图: 创建一个程序每5秒从unsplash上更新一张图片。

创建一个Storyboard Swift的App,然后在XIB上放上一个ImageView, 正确设置AutoResizing,确保图片全尺寸,然后将outlets拖入ViewController.swift。

import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var imageView: NSImageView!
    var timer: Timer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView.image = NSImage(named:"sample")
    }
    
    override func viewWillAppear() {
        print("view will appear")
        timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { timer in
            
            // https://source.unsplash.com/random
            // Create URL
            let url = URL(string: "https://source.unsplash.com/random")!

            // Fetch Image Data
            if let data = try? Data(contentsOf: url) {
                // Create Image and Update Image View
                self.imageView.image = NSImage(data: data)
            }
        }
    }
    
    override func viewDidDisappear() {
        print("view did disappear")
        timer?.invalidate()
        timer = nil
    }
}

注:

  • App内部图片从电脑上拖入Assets.xcassets中即可在ViewController中使用
  • ViewDidLoad可以理解为init,但是缺少对应的uninit,可以理解为不需要手动释放,所以对应的应该采用appear和disappear,这个有待后续进一步补充

下一步计划:

  • 增加图片过渡效果,比如淡入淡出等。

nonocast avatar Jul 15 '21 17:07 nonocast