macOS 开发基础教程 - 视频剧透

图片来自网络

起因

近几个月来,在简书上经常有朋友会对关于macOS 开发方面技术提出一些问题,在回复问题的过程,一个明显的感觉是越来越多的人喜欢macOS开发,但关于这方面的资料,网络上还是比较少,因此萌生了录制一套基础入门课程视频,采用Swift4.0作为开发语言,预计这个月底(8月31日)前可以完成录制,大概有一百二十个课时左右,主要介绍基础控件的常规应用,主要希望对从iOSermacOS开发的朋友有所帮助,课程预发平台选则了网易云课堂,课程的价格每课时大概1.00RMB(第一次录制课程,才感觉原来视频讲解也挺不容易呀,但限于水平与经验,对视频中的问题到时候还请大家多多指正

部分目录

录制课程表1

录制课程表2

课程链接

最新课程观传送门

干货摘录

无技术,不文章。下面对课程中的部分内容进行简单整理一下,以问答的形式供大家参考,如果你是个macOS老手,欢迎对本文指出不足或对某段进行补充完善,共同学习,如果你是新手,希望能帮你解决一些问题

  1. NSViewController中,如何设置NSView的背景色
    答: 主要分两种情况,在2的情况下,注意语句的顺序不能错

      // 1. 如果是Controller的View
        view.layer?.backgroundColor = NSColor.red.cgColor
     // 2. 如果是添加到Controller的其他NSView
          view.addSubview(yourView)
          yourView.layer?.backgroundColor = NSColor.red.cgColor
    
  2. 如何让NSImageView支持Gif图片?
    答: 分代码创建的NSImageView和在Storyboard中拖拽的NSImageView两种情况

     // 1. 如果是代码创建的NSImageView
          yourImageView.image =  NSImage(named: "xxx“) // xxx为你的gif图片
          yourImageView.animates = true
     // 2. 如果是Storyboard中拖拽的,animates默认值就是true,可以直接设置图片属性
          yourImageView.image =  NSImage(named: "xxx“) // xxx为你的gif图片
    
  3. 如何实现像iOSUITableView分组样式
    答: 相比iOS,在macOS中NSTableView没有分组功能,而是提供了分栏(列)的功能,如果希望实现UITableView的分组功能,并且每组都有HeaderViewFooterView,可以使用NSCollectionView

  4. 怎么给一个NSButton添加左键点击弹出菜单?
    答: 在NSButton的点击事件中,添加如下代码

     NSMenu.popUpContextMenu(yourMenu, with: NSApp.currentEvent, for:yourButton )
    
  5. 如何用代码设置一个NSView右键菜单
    答: 在macOS中,NSView有一个menu的属性,给这个属性进行赋值,即可实现右键弹出菜单

    yourView.menu = yourMenu
    
  6. 如何让NSImageView支持图片拖拽
    答:设置NSImageView的isEditable 属性为true

     yourImageView.isEditable = true
    
  7. 在不使用第三方库的情况下,如何快速使用代码添加约束?
    答: 在macOS中,提供了NSLayoutAnchor帮助我们快速手动添加控件的约束,实现自动布局效果

     // 设置imageView的左边相对view的左边偏移10个单位的距离
     imageView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10)
     // 设置imageView的顶部与view的顶部对齐
     imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0)
     // 设置imageView的宽度约束等于150
     imageView.widthAnchor.constraint(equalToConstant: 150)
    // 设置imageView的高度约束等于200
     imageView.heightAnchor.constraint(equalToConstant: 200)
    
  8. 如何手动切换NSWindow全屏模式
    答: 调用NSWindow的toggleFullScreen方法,如果当前为全屏模式,则退出全屏,否则将进入全屏模式

    // 切换全屏
     yourWindow.toggleFullScreen(yourView)
    
  9. 如何设置点击NSWindow内容可以拖动窗口?
    答: 设置isMovableByWindowBackground = true即可

      // 设置点击内容支持鼠标拖动窗口
      yourWindow.isMovableByWindowBackground = true
    
  10. 如何隐藏App在Dock栏上的图标?
    答: 在macOS中,设置App的UI类型为agent,系统就会隐藏App在Dock栏上的图标,实现方法是需要在info.plist文件中添加如下选项即可

    设置隐藏Dock的图标

  11. 如何给App在Dock上添加右键菜单选项?
    答: 在AppDelegate中实现applicationDockMenu(_ sender: NSApplication) -> NSMenu?方法即可

     // 在Dock栏添加右键菜单选项
     func applicationDockMenu(_ sender: NSApplication) -> NSMenu? {
       let viewMenu = NSMenu(title: "ViewMenu")
       let viewItem = NSMenuItem(title: "first ", action:#selector(showAlert), keyEquivalent: "p")
       viewMenu.addItem(viewItem)
       return viewMenu
    }
    
  12. 为什么NSAlert 设置控件frame时不起作用?
    答: 在对NSAlert中的系统部分控件进行重新布局时,在新设置的控件的frame时,需要提前调用NSAlert 的layout方法

  13. 为什么我的App关闭窗口再点击Dock上的图标,无法重新打开
    答: 默认情况下,关闭了App的主窗口,再次点击Dock栏图标时,系统不会响应的。如果需要再次显示窗口,需要实现applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool方法

     func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
        if flag == false {
            yourMainWindow.makeKeyAndOrderFront(nil)
            return true
        }
        return !flag    
    }
    
  14. 为什么在NSDocument中,print打印信息时会报错?
    答: 在基于NSDocument的应用中,默认提了打印函数print用来实现将文档内容打印到硬件设备(打印机,如果需要打印输出调试信息,需要显示的调用print方法

     // 在NSDocument类中,显式的调用打印输出
       Swift.print("your message")
    
  15. 如何去除NSTextField输入时的蓝色边框?
    答: 设置 focusRingType 属性为None即可,这个属性也支持在Storyoard中设置

      // 关闭输入控件的蓝色选中边框
        textField.focusRingType = .none
    

    在Storyboard中设置

    关闭输入控件的蓝色边框效果

  16. 怎么修改NSMenuItem系统默认的组合快捷键
    答: 通过设置NSMenuItem的keyEquivalentModifierMask属性,可以系统给定的枚举值来生成组合的快捷键

       // 设置菜单项目的快捷键为 option + p
      let viewItem = NSMenuItem(title: "first ", action: #selector(showAlert(_:)), keyEquivalent: "p")
      viewItem.keyEquivalentModifierMask = .option
    
  17. 如何实现NSView动画效果
    答:关于动画的方式有很多,通常我们用的较多的是类似UIView animate的效果,可以通过 NSAnimationContext.runAnimationGroup方法来在macOS中实现动画效果

     NSAnimationContext.runAnimationGroup({ (context) in
            context.duration = 2    // 设置动画执行需要的时间
            view.animator().frame = NSMakeRect(100, 100, 100, 100)  // 设置frame动画新值
        }) {
            // 动画执行完毕
            // insert your code
            view.animator().alphaValue = 1  
        }
    
  18. 如何设置系统状态栏上的App icon图标适应状态栏背景色
    答: 很多App都在系统状态栏上提供栏一个icon图标供用户使用,需求中常常是要求根据系统状态栏颜色使用不同icon来进行适配,其实我们只需要设置imageisTemplate属性为true即可

     ......
     let statusItem = NSStatusItem()         
     let yourImage = NSImage(named: "")   // 通常这个图片最好只有是黑色和白色两种组成
     yourImage?.isTemplate = true   // 设置为true ,会自动适配状态背景色
     statusItem.image = yourImage
     ......
    
    

尾声

最近录制课程视频才体会到,很多事情看着简单,但真正做起来真不是想象中那个样子,会有很多的意料之外的情况,在最开始录制的阶段,一段三分钟左右的简单内容,我常常修要反复录制四遍,五遍。。虽然很多东西自己心里清楚,但是对着屏幕进行讲解时,和平时状态不一样,很容易出错,而且也会经常有不知道下一步要说什么,但在录制的过程中,也对过往知识进行了复习,温故而知新,心有欣欣焉

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容