如何使用drawInRect

时间:2014-02-11 21:38:42

标签: ios objective-c

我为iPhone应用程序启动了一个全新的XCode项目,并在viewDidLoad中添加了以下代码。(没有添加或导入框架,没有其他代码) 我正在使用iOS 7。 什么都没发生。它应该在屏幕上写“Hello”。我做错了什么?

[@"Hello" drawInRect:rect withAttributes:[NSDictionary
                                                      dictionaryWithObjectsAndKeys:
                                                      [UIColor redColor], NSForegroundColorAttributeName,
                                                      [UIFont systemFontOfSize:24], NSFontAttributeName,
                                                      nil]];

2 个答案:

答案 0 :(得分:2)

这是用于绘制文本的代码,但这不是您通常在iOS中向屏幕添加文本的方式。在iOS中,用于向屏幕添加文本的模型通常只需将UILabel添加到视图控制器的视图中,例如,在viewDidLoad中,您可以执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UILabel *label = [[UILabel alloc] initWithFrame:self.view.bounds];
    label.textColor = [UIColor redColor];
    label.font = [UIFont systemFontOfSize:24.0];
    label.text = @"Hello";
    [self.view addSubview:label];

    // or, if you really wanted to use an attributed string:
    //
    // UILabel *label = [[UILabel alloc] initWithFrame:self.view.bounds];
    // NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"Hello"
    //                                                                        attributes:@{NSForegroundColorAttributeName : [UIColor redColor],
    //                                                                                     NSFontAttributeName            : [UIFont systemFontOfSize:24]}];
    // [label setAttributedText:attributedString];
    // [self.view addSubview:label];
}

您需要此drawInRect方法的地方就是在特殊情境中绘图时,例如在UIView子类中。因此,您可以定义UIView子类并编写使用您的代码的drawRect方法:

例如,CustomView.h:

//  CustomView.h

#import <UIKit/UIKit.h>

@interface CustomView : UIView

@end

和CustomView.m:

//  CustomView.m

#import "CustomView.h"

@implementation CustomView

- (void)drawRect:(CGRect)rect
{
    [@"Hello" drawInRect:rect withAttributes:@{NSForegroundColorAttributeName : [UIColor redColor],
                                               NSFontAttributeName            : [UIFont systemFontOfSize:24]}];
}

@end

然后,您可以在视图控制器中添加CustomView

//  ViewController.m

#import "ViewController.h"
#import "CustomView.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    CustomView *customView = [[CustomView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:customView];
}

@end

正如您所知,这对于非常特殊的情况来说有点麻烦,但是根据您与我们分享的内容,它比您可能需要考虑的要繁琐得多。通常,如果您只是想在drawInRect中向视图中添加文字,则不会使用viewDidLoad方法。

答案 1 :(得分:1)

实际上可以直接使用NSAttributedString的 drawInRect:方法:

    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.text attributes:self.displayAttributes];
    CGContextSaveGState(cgContext);
    [attributedString drawInRect:frame];
    CGContextRestoreGState(cgContext);