NSView未在启动时绘制(swift)

时间:2016-05-26 15:04:40

标签: swift xcode7

我正在尝试在应用程序启动时以及按下按钮时绘制Cocoa应用程序中的子视图,因此我在IB中创建了所有内容并制作了正确的插座和操作。

在子视图中,我正在下载和绘制三张图片,到目前为止一直很好,但唯一的问题是只有在我调整窗口大小时才会显示图像。

我在绘制图片时尝试重置原始视图的needsDisplay属性,但似乎不起作用。 最重要的是,当我调整窗口大小时,我会看到一些摇晃的故障(我使用自动布局来相应地重新缩放图形,但是它们会不时地缩小到0像素,然后它们会回到预期的大小)。

这是我的第一个快速项目,所以它可能不是最优的,但是如果有人知道为什么它不起作用会非常感激。

编辑:我粘贴了错误的链接,这个应该有效 https://www.dropbox.com/s/yf9m9vpxckjvfsv/Cnaf-monitor.zip?dl=0

我做了IB中的大部分项目,我必须放置一些代码的唯一部分是ViewController.swift

import Cocoa

class ViewController: NSViewController {
// MARK: Properties

@IBOutlet weak var Image1: NSImageCell!
@IBOutlet weak var Image2: NSImageCell!
@IBOutlet weak var Image3: NSImageCell!
@IBOutlet weak var SbView1: NSView!
@IBOutlet weak var LastUp: NSTextFieldCell!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    //        self.view.wantsLayer = true
    //        self.SbView1.wantsLayer = true  
}

override func viewWillAppear() {
}

override var representedObject: AnyObject? {
    didSet {
    // Update the view, if already loaded.
    //            self.SbView1.layer?.backgroundColor = NSColor.whiteColor().CGColor
        refreshPlots()
    }
}

// MARK: Actions
@IBAction func refreshPlotsAction(sender: NSButton) {
    refreshPlots()
}


//get data from URL
func getDataFromUrl(url:NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError? ) -> Void)) {
    NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
        completion(data: data, response: response, error: error)
        }.resume()
}


//download image
func downloadImage(url: NSURL, image: NSImageCell){
    print("Download Started")
    print("lastPathComponent: " + (url.lastPathComponent ?? ""))
    getDataFromUrl(url) { (data, response, error)  in
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            guard let data = data where error == nil else { return }
            print(response?.suggestedFilename ?? "")
            print("Download Finished")
            image.image = NSImage(data: data)
            //                Image1.image = NSImage(data: data)
        }
    }
}

func refreshPlots() {
    //Building the URL string...
    let baseUrl = "http://tier1.cnaf.infn.it/monitor/monitoring/all/"
    let date = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Month).union(NSCalendarUnit.Day).union(NSCalendarUnit.Hour).union(NSCalendarUnit.Minute), fromDate: date)
    let string1 = String(components.year) + String(format: "%02i", components.month) + String(format: "%02i", components.day-1) + String(format: "%02i", components.hour) + String(format: "%02i", components.minute)
    let string2 = String(components.year) + String(format: "%02i", components.month) + String(format: "%02i", components.day) + String(format: "%02i", components.hour) + String(format: "%02i", components.minute)
    print(string1 + "-" + string2)

    if let checkedUrl = NSURL(string: baseUrl+"ams_short/"+string1+"-"+string2+".jobs-800x600.png"){
        downloadImage(checkedUrl, image: self.Image1)
    }

    if let checkedUrl = NSURL(string: baseUrl+"ams/"+string1+"-"+string2+".jobs-800x600.png"){
        downloadImage(checkedUrl, image: self.Image2)
    }

    if let checkedUrl = NSURL(string: baseUrl+"ams_prod/"+string1+"-"+string2+".jobs-800x600.png"){
        downloadImage(checkedUrl, image: self.Image3)
    }
    self.LastUp.title = "Last update: " + String(format: "%02i", components.hour) + ":" + String(format: "%02i", components.minute) + " - " + String(format: "%02i", components.day) + "/" + String(format: "%02i", components.month) + "/" + String(format: "%02i", components.year)
    dispatch_async(dispatch_get_main_queue(), {self.view.needsDisplay = true})

}


}

0 个答案:

没有答案