我正在尝试在应用程序启动时以及按下按钮时绘制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})
}
}