2014-02-11 69 views
-2

我已經開始爲iPhone應用程序一個絕對新鮮的XCode項目,並把剛剛下面的代碼中viewDidLoad中。(無添加框架或進口的,沒有其他的代碼) 我使用的是iOS 7 什麼也沒有發生。它應該在屏幕上寫下「Hello」。我做錯了什麼?如何使用drawInRect

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

你將不得不學習一大堆更似乎...去閱讀一些文檔。 drawInRect繪製到當前的上下文,而不是屏幕。假如代碼本身工作,這個代碼將工作,如果放入DrawRect:函數 – Jack

回答

1

這是繪製文本的代碼,但是這不是你一般文本添加到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 

正如你所看到的那樣,這有點麻煩,對於特殊情況很好,但是根據你與我們分享的內容,它比你可能需要考慮的要麻煩得多。一般來說,如果您只是想在viewDidLoad的視圖中添加文字,您就不會使用drawInRect方法。

+0

謝謝你的答案.-(void)drawRect:(CGRect)矩形工作。我試圖找到在按鈕大小發生變化後調整UIView中文本的最佳方式,如標籤或按鈕。它應該適合新的尺寸。 – user2415476

+0

@ user2415476您可以更改您使用的'CGRect',或者現在越來越多的人會使用自動佈局(iOS 6+)來控制單獨控件的相對位置。 – Rob

1

其實它是可以直接使用drawInRect:NSAttributedString的方法:

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