Objective C在屏幕上写文本(以及库/框架概述)

时间:2014-01-08 02:22:45

标签: objective-c uikit

我正在学习目标C并且可以使用一些指针(双关语)。我有Java背景。我刚刚完成了“使用Objective C编程”一书。我试图使用drawWithRect在屏幕上绘制一些文本,但无法使这段示例代码工作。

    #import <Cocoa/Cocoa.h>

    #import <AppKit/NSStringDrawing.h>
    //#import <UIKit/UIKit.h>   //this is invalid
    //#import <UIKit/UIColor.h>  //this is invalid

    #import "NSString+Draw.h"


        NSDictionary *attributes = @{
                NSForegroundColorAttributeName:[UIColor blueColor]
        };

        [@"Hello" drawWithRect:CGRectMake(20, 20, 50, 50) 
options:0 attributes:attributes context:nil];

它似乎不在我的XCode项目的Frameworks文件夹中。我看过苹果开发者网站,却被无关的信息所淹没。

  1. 如何获得此UIKit?这是一个插件吗?顺便说一下为什么一些进口使用引号和其他尖括号?它们可以互换吗?

  2. 我对框架没有很好的了解。什么是关键框架?

  3. 是否有基于Web的API文档,如Javadocs?

  4. 还在。

    是否有相当于OSX的UIKit / UIColor等? - 我发现了它,AppKit / NSColor

    好的经过一些探索我得到了这个,但它仍然没有写在屏幕上。

    #import <Cocoa/Cocoa.h>
    #import <AppKit/NSStringDrawing.h>
    #import <AppKit/NSColor.h>
    #import "NSString+Draw.h"
    
    @implementation NSString (Draw)
    
    - (void) drawString:(NSString *) myString{
        NSDictionary *attributes = @{
                NSForegroundColorAttributeName:[NSColor blueColor]
        };    
        [@"Hello" drawInRect:CGRectMake(20, 20, 50, 50) withAttributes:attributes];
    }
    

4 个答案:

答案 0 :(得分:3)

  1. 看起来您已经创建了一个针对OSX的项目。 UIKit是仅包含在iOS中的框架。创建一个iOS项目以使用该框架。

  2. UIKit是iOS的大框架,包括UIColor(或带有UI前缀的任何其他内容)。

  3. 文档在线,也可以在“帮助”标签的Xcode中找到

答案 1 :(得分:0)

除了需要使用UIKit和iOS项目之外,它还可以直接导入顶级标题,而不是单个标题。

所以只是

#import <UIKit/UIKit.h>

或者,如果在Xcode 5上

@import UIKit;

答案 2 :(得分:0)

要在屏幕上绘制任何内容,您需要一些称为图形上下文的东西。图形上下文为您提供了绘制和操作的区域。 Apple在他们的documentation here中做了很好的解释。通过Apple文档进一步研究得出specific section for drawing text(特别是NSString)。以下摘自NSString Drawing文档:

  

Application Kit向NSString类添加了三个方法,以直接在NSView实例中支持绘图字符串对象:drawAtPoint:withAttributes:drawInRect:withAttributes:sizeWithAttributes:

您可能需要检查三件事,以确保所有内容都被正确绘制:

  1. 必须拥有一个活动的NSView才能进行绘制。检查是否有要激活的NSView。
  2. 您可能需要向属性字典中添加更多参数。我没有看到任何必需的键,但添加字体参数背景颜色参数可能是个好主意。
  3. 文本是否实际适合指定的范围?也许指定一个更大的CGRect(至少用于测试)?
  4. 如果您对使用AppKit方法绘制NSString感到非常沮丧,请尝试使用Core Text框架:

      

    Core Text是一种用于布局文本和处理字体的高级低级技术。可以从所有OS X和iOS环境访问Mac OS X v10.5和iOS 3.2中引入的Core Text API。


    有关框架和一般SDK问题的信息:

    1. 下载Xcode时,您也可以下载开发SDK和相关文档。 Development SDK主要由Frameworks(来自Apple)组成。 Framework是一个包含可见头文件的庞大编译代码库。所以,你看不到实现,但你可以看到标题。

      导入框架时(无论是否来自Apple),请使用括号(如果在构建设置中启用了模块,则使用模块)。导入文件(而不是框架)时,只需使用引号。

    2. iOS和OS X都有很多框架。我不能在这里列出所有框架,但我可以告诉你关键的。这是一个link to the iOS developer documentation, including the frameworks。 iOS上的四大亮点是基础 UIKit CoreGraphics ,以及(有时) QuartzCore 。当您在Xcode文件导航器中单击项目时,您应该看到项目设置和包含的框架列表。单击加号按钮以查看可以添加的所有Apple框架。其中大多数都与系统服务有关(例如GameCenter框架是GameKit,而Passbook框架是PassKit)。

    3. 是的! Apple开发人员文档可在线和离线使用(随Xcode一起安装)。在线文档通常可以通过谷歌搜索找到,但这里是link。它也在Xcode帮助菜单/文档菜单中。您还可以选择单击要了解更多信息的任何代码。

    4. OS X的UIKit(仅限iOS的框架)相当于AppKit。大多数类都是相同的名称,只有NSA前缀而不是UI前缀。例如,在OS X上,您需要NSColor而不是UIColor。

答案 3 :(得分:0)

要在视觉上做事,你需要一个图形上下文来绘制。

Objective-C没有提供。 操作系统通过窗口服务器完成。 OS X上的AppKit通过NSWindow提供此功能。 iOS上的UIKit为此提供了一个隐式窗口。