美文网首页学无止境电脑相关MacOS 开发
macOS 开发基础教程 - 视频剧透

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

作者: 代码行者 | 来源:发表于2017-08-24 14:00 被阅读1645次
图片来自网络

起因

近几个月来,在简书上经常有朋友会对关于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
     ......
    
    

尾声

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

相关文章

网友评论

  • 九剑仙:如何让一个APP没有主窗口,只显示状态栏小图标
  • b2778e13991f:已经入手基础视频 ,希望尽快看到进阶,公司要做mac项目 从ios转过来的
    代码行者:@筱兮翥 :pray:谢谢支持,进阶课程计划在春节假期完成,多谢鼓励!
  • 3aaae3a4809c:买了视频哈,抽几章看的,问下视频中代码的地址在哪呢
    代码行者:@laiqurufeng 视频里都有说项目的GitHub地址呀
  • 邓高鹃:先建立一个QQ群吧
    代码行者:@邓高鹃 :smile:最近公司比较忙,进阶实战项目还在制作中
    邓高鹃:@代码行者 看了下!你的教程过于基础!没有相关的实战!要不要把事情搞大一点?加我QQ:1852022054
    代码行者:@邓高鹃 :joy:很少用QQ,大家都来简书交流
  • 邓高鹃:视频初了吗?准备入手一套
    代码行者:@邓高鹃 :smile:已经发布啦http://study.163.com/course/introduction.htm?courseId=1004170018#/courseDetail?tab=1
  • ShevaKuilin:你好,我刚才在网易云课堂买了你的教程,但是关于NSButton有点疑问,我如何能让NSButton在鼠标点击松手后再改变状态呢?现在是点击上去马上就改变了,不知道是不是需要特定设置mouse相关属性,教程里没看到关于鼠标设置相关的内容
    ShevaKuilin:@代码行者 是重写触摸事件而不是重写鼠标点击吗?
    代码行者:@ShevaKuilin :blush:感谢你对课程的支持!
    代码行者:@ShevaKuilin 系统提供的NSButton是没有这个设置的,如果你需要这样的功能,可以继承NSButton后,自定义一个按钮来实现,重写触摸事件的部分就可以:smile:
  • 北风一叶:请问发布了么,要入手啊
    代码行者:@北风一叶 http://study.163.com/course/introduction.htm?courseId=1004170018#/courseDetail?tab=1
    北风一叶:@代码行者 您好,可以把链接直接发我一下么,谢谢!
    代码行者:@北风一叶 :smile:已经发布有两周啦,可以看我的技术文章里有说明
  • 小小Q吖:可以看了吗
    小小Q吖:@代码行者 找到了 吃土少年 买不起
    代码行者:@小小Q吖 http://www.jianshu.com/p/5ee6030aeb4f 我后面的更新文章里有说明
    代码行者:@小小Q吖 这个月初就可以了...
  • 1305ff7541af:大神, 我要打劫 ,留下你的视频
    1305ff7541af:@代码行者 我看王威的书看了下,发现swift语法糖太多了
    1305ff7541af:@代码行者 哇哦
    代码行者:@会飞的小鱼鱼鱼 技术文章有视频链接的:smile:
  • b1e44f7b80cb:我滴哥啊,为嘛是基于Swift的啊,寻找Mac OS x开发视频好久了额
    代码行者:@BigSur oc看这个也是没问题的:smile:,都是基础
  • Fisher123:求视频链接!
    代码行者:@Hello0307 现在预发中,过了审核会通告大家的:smile:
  • 2b26cb71b38f:一课1元?甚是良心
    代码行者:@凉凉的霜 :blush:谢谢
  • 翰墨飘香:支持
    代码行者:@翰墨飘香 :pray:感谢支持
  • 68ffb1c88190:您好,请问用nstask怎么获取权限呢
    代码行者:@呀咪9527 权限需要先引导用户选择命令的执行文件路径,否则nstask无法执行对应的命令,沙盒机制问题
  • xexiaoyi:很是期待
    代码行者:@xexiaoyi 多谢关注
  • Daredake:寻找macOS编程的教程好久了,一定第一时间加入学习!
    代码行者:@daredake :smile:感谢支持
  • 苜蓿鬼仙:大神给个网易云课堂的链接呀!!!
    代码行者:@苜蓿鬼仙 还没录制完成:smile:敬请关注
  • Andy_Ron:期待视频!
    代码行者:@Andy_Ron 欢迎指正
  • 背靠背的微笑:大神,期待你的视频,欢迎继续投稿哈。
    背靠背的微笑:@代码行者 关注我,后期帮你宣传。
    代码行者:@背靠背的微笑 感谢支持
  • Aikesi26:出了准备入手一套
    代码行者:感谢支持:smile:

本文标题:macOS 开发基础教程 - 视频剧透

本文链接:https://www.haomeiwen.com/subject/ggesdxtx.html