我为iPhone应用程序启动了一个全新的XCode项目,并在viewDidLoad中添加了以下代码。(没有添加或导入框架,没有其他代码) 我正在使用iOS 7。 什么都没发生。它应该在屏幕上写“Hello”。我做错了什么?
[@"Hello" drawInRect:rect withAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:
[UIColor redColor], NSForegroundColorAttributeName,
[UIFont systemFontOfSize:24], NSFontAttributeName,
nil]];
答案 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);