启动图名字生成第二篇
我们写一下配置启动图名字的页面保存按钮的逻辑
@IBAction func saveAction(_ sender: Any) {
for index in 0..
我们在之前的OFileManger
类里面写一个保存我们启动图名字的方法。
/// 保存自定配置的启动图的名称
///
/// - Parameter list: 启动图名称的列表
func saveLaunchNames(list:[String]) {
let userDefaults = UserDefaults.standard
userDefaults.set(list, forKey: SLaunchNameKey)
userDefaults.synchronize()
}
/// 读取保存的启动图的名称列表
///
/// - Returns: 字符串数组 可能读取不出来
func readLaunchNames() -> [String]? {
let userDefaults = UserDefaults.standard
return userDefaults.object(forKey: SLaunchNameKey) as? [String]
}
我们在点击保存按钮之后让执行保存的方法还有消失试图
SFileManger.saveLaunchNames(list: promptValues)
self.dismiss(nil)
我们在NSViewController
下面的方法写逻辑,让弹出配置启动图试图时候把我们本地的配置传递过去
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let any = segue.destinationController
guard let controller:LaunchNameViewController = any as? LaunchNameViewController else {
return
}
guard let list = SFileManger.readLaunchNames() else {
return
}
controller.promptValues = list
}
经过发现NSImage
属性的Size
不是真正的分辨率的大小,我们需要用到
open var representations: [NSImageRep] { get }
属性,里面的NSImageRep
里面的
open var pixelsWide: Int
open var pixelsHigh: Int
我们写一个给NSImage
写一个扩展的属性sSize
extension NSImage {
var sSize:NSSize {
get {
var size = NSZeroSize
if representations.count > 0 {
let rep = representations[0]
size = NSSize(width: rep.pixelsWide, height: rep.pixelsHigh)
}
return size
}
}
}
写一下保存的逻辑
class func saveLaunchImages(list:[NSImage], names:[String]) {
let savePannel = NSOpenPanel()
savePannel.canCreateDirectories = true
savePannel.canChooseFiles = false
savePannel.canChooseDirectories = true
let index = savePannel.runModal()
guard index == NSFileHandlingPanelOKButton else {
return
}
guard let dic = savePannel.directoryURL else {
return
}
for index in 0..
后来有一个一键可以直接拖拽 这个功能我们百度一下怎么写?
方法基本就是NSDraggingSource, NSDraggingDestination, NSPasteboardItemDataProvider这些代理,你可以看看这个例子https://github.com/phaibin/DragDropDemo
注册接受文件的类型
override func awakeFromNib() {
register(forDraggedTypes: [NSFilenamesPboardType])
}
完成拖拽的逻辑
override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
guard let type = sender.draggingPasteboard().types else {
return NSDragOperation.generic
}
if type.contains(NSStringPboardType) {
isDrag = true
self.isHighlighted = true
return NSDragOperation.copy
}
return NSDragOperation.generic
}
override func draggingExited(_ sender: NSDraggingInfo?) {
isDrag = false
self.isHighlighted = true
}
override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
isDrag = false;
self.isHighlighted = true
return true;
}
override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
guard let list = sender.draggingPasteboard().propertyList(forType: NSFilenamesPboardType) as? [String] else {
return false
}
UserDefaults.standard.set(list, forKey: "dragListImage")
UserDefaults.standard.synchronize()
return true
}
class func readDragImageList() -> [String]? {
return UserDefaults.standard.object(forKey: "dragListImage") as? [String]
}