【问题标题】:Jumping from iOS to OSX [closed]从 iOS 跳到 OSX [关闭]
【发布时间】:2011-05-06 18:39:38
【问题描述】:

我想开始学习为 OSX 编程,但只为 iOS 编程。

除了与硬件相关的问题(例如内存、处理能力等)之外,在编程级别上还有哪些显着差异?

在实际的 api 和编程方面,例如鼠标和键盘使用的项目,而不是触摸屏。

我想从有这方面经验的人那里得到一些建议,并且可能是好的书籍链接或教程链接开始。

谢谢

【问题讨论】:

    标签: iphone macos


    【解决方案1】:

    让我这样说吧:不要只是尝试将所有东西移植到 Mac 上而不考虑设计原则。许多开发人员正在寻求加入 Mac 开发人员的行列,而无需将时间投入到他们的应用程序中。简单地将应用从 iOS 迁移到 Mac 并不能带来好的界面。

    面对现实吧,iOS 是为触摸屏而构建的,而 Mac 不是。因此,简单地转移您的界面可能会奏效,但它不好并且被许多用户所反对。我要做的只是下载一些著名的 Mac 应用程序(演示工作正常),然后研究与 iOS 相比的界面布局。有相似的概念,但差异大于相似之处。

    最根本的区别是iPhone上的界面只能有一个窗口,而Mac可以有无限个窗口(理论上)。将所有视图塞入一个窗口并不能在 Mac 上实现。用户已经开始期待多个窗口,老实说,这是一种更好的方法。

    所以我的建议是从头开始学习 Cocoa,然后考虑将您的应用程序转移过来......不是通过简单地移植它,而是通过制作一个全新的界面。您的模型仍然可以使用,因为两个平台都使用 Objective-C。

    平台如此相似,却又如此不同。 :)

    【讨论】:

    • 感谢 sudo rm -rf。我计划从头开始学习 OSX,而​​不是一开始就尝试移植任何东西。是的,设计具有如此多屏幕资源空间的应用程序要好得多。我会得到一本可可书并完成它。谢谢
    • 没问题。我是一个相对较新的程序员,我从 iOS 开始。最初转移到 Mac 很困难,但是一旦我把注意力集中在NSViewControllers 以及如何创建和销毁窗口,就没有那么难了。我学会了爱上 Cocoa Bindings。他们很神奇。 :)
    • 太棒了。好吧,我的“桌面”体验是使用 Java,而使用 Swing 是一场噩梦。
    • 是的,您发布的这些图片确实证实了窗口大小如何影响用户体验和设计能力。
    • 确实如此。工具栏确实改变了用户与您的应用程序交互的方式,以及菜单项。
    【解决方案2】:

    在编写现代 OS X 应用程序时,您通常会使用 Data Binding 将您的模型连接到您的视图,通常是通过像 NSArrayController 这样的通用控制器。

    对 Cocoa Data Binding 进行深入了解对于新手来说是一项具有挑战性的任务,起初非常令人沮丧,然后又非常令人兴奋。如果您的主数据绑定可能会从根本上改变您设计软件的方式。

    问题是您的 iOS 应用程序在设计时都没有考虑到数据绑定,这是您必须跨越的一座桥梁,才能成为一名快乐且高效的 OS X 开发人员(同时了解各种不同的 SDK 差异)

    【讨论】:

      【解决方案3】:

      我在 2 年前去了另一条路,并且出乎意料地难以搬家。

      OS X 更老,并且是在 Objective-C 2.0 之前创建的,因此在旧的 AppKit / CoreFoundation 类中没有太多属性。我的大部分旧 iOS 代码如下所示:

      [[self navigationController] popViewControllerAnimated: YES];
      

      UI:大多数响应器/视图/控件层次结构都是相似的,但现在称为 NS(来自 NextStep 的拉丁文)而不是 UI(拉丁文的小屏幕)。

      控件:

      有点不同,你将一个动作连接到一个控件,控件决定何时发送动作消息,即。滚动条是否设置为连续发送消息。这与 UIkit 的操作方式略有不同,您在其中连接到事件类型:值更改、内部修饰等。

      您在 OS X 中获得了不止一个窗口,它为您带来了新的机遇和挑战。您必须更多地担心响应者层次结构。

      小事总能吸引你,就像在 UIBezierCurve 中,方法的命名与 NSBezierCurve 略有不同,addLineToPoint: 而不是 lineToPoint:

      注意你的编译器警告并拿一本新书,你会没事的。

      【讨论】:

        【解决方案4】:

        这两个平台多年来变得更加相似,许多 OS X API 被迁移到 iOS。我认为主要的区别是 UI 部分。在 OS X 上,您使用 AppKit 而不是 UIKit 来呈现您的 UI。 (尽管您可以同时使用 Interface Builder)。

        一些 API 发生了逆转:CoreLocation 曾经是一个仅限 iOS 的框架,现在可以在 OS X 上使用。

        其他变化:

        • 事件模型不同(NSEvent 与 UIEvent)。
        • CoreImage 在 OS X 上可用

        根据您的经验水平,我将从 Xcode 中的一些 Apple 提供的 AppKit 示例开始。高温

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-18
          相关资源
          最近更新 更多