2015-05-24 127 views
1

我有这样的形象自定义视图,并将其作品(文字字体和文本颜色我在设置的drawRectIBDesignable查看渲染

+ **************** *** +

*文本01IMAGE *

*文本02 _______ *

+ ********** ********* +

现在我想设置字体和颜色从接口Builde,但我得到的错误:

IB Designables: Failed to render instance of AvailableSeatView: Rendering the view took longer than 200 ms. Your drawing code may suffer from slow performance.

这里我的代码:

在AvailableSeatView.h

#import <UIKit/UIKit.h> 
IB_DESIGNABLE 
@interface AvailableSeatView : UIView 
@property (nonatomic) IBInspectable UIImage *image; 
@property (nonatomic) IBInspectable NSInteger numberSeats; 
@property (nonatomic) IBInspectable UIFont *numberSeatsFont; 
@property (nonatomic) IBInspectable UIColor *numberSeatsColor; 
@property (nonatomic) IBInspectable NSString *title; 

在AvailableSeatView.m

@implementation AvailableSeatView 
- (void)drawRect:(CGRect)rect { 
    //UIImage 
    CGRect myFrame = self.bounds; 
    CGFloat yImage = myFrame.size.height/2 - self.image.size.height < 0 ? 0 : myFrame.size.height/2 - self.image.size.height; 
    CGRect imageFrame = CGRectMake(myFrame.size.width/2, yImage, self.image.size.width, self.image.size.height); 
    [self.image drawInRect:imageFrame]; 

    //UILabel number of seats 
    [self drawString:[NSString stringWithFormat:@"%li", (long)self.numberSeats] 
      withFont:self.numberSeatsFont 
      andColor:self.numberSeatsColor 
      aligment: NSTextAlignmentRight 
       inRect:CGRectMake(0, yImage, imageFrame.origin.x, self.image.size.height)]; 

    //UILabel Title 
    UIFont *titleFont = [UIFont systemFontOfSize:20]; 
    UIColor *titleColor = [UIColor redColor]; 
    [self drawString:self.title 
      withFont:titleFont 
      andColor:titleColor 
      aligment: NSTextAlignmentCenter 
       inRect:CGRectMake(0, myFrame.size.height/2, myFrame.size.width, myFrame.size.height/2)]; 
} 

- (void) drawString: (NSString*) s 
      withFont: (UIFont*) font 
      andColor: (UIColor *)color 
      aligment: (NSTextAlignment) alignment 
      inRect: (CGRect) contextRect { 

    CGFloat fontHeight = font.pointSize; 
    CGRect textRect = CGRectMake(0, contextRect.origin.y, contextRect.size.width, fontHeight); 
    NSMutableParagraphStyle* p = [NSMutableParagraphStyle new]; 
    p.alignment = alignment; 
    [s drawInRect:textRect withAttributes:@{NSFontAttributeName: font, 
              NSForegroundColorAttributeName: color, 
              NSParagraphStyleAttributeName: p}]; 
} 
@end 

在谷歌搜索后,我发现这个职位:IBDesignable View Rendering times out我尝试做覆盖initWithFrame,initWithCoder但它仍然无法正常工作。

回答

0

基本上,使用DrawRect()方法进行实时渲染的目的是错误的概念。 Apple为此提供了一个单独的方法(用于Live渲染目的)“ - (void)prepareForInterfaceBuilder {}”。 但是,在这种情况下,您无法从IB设置UIFont属性。但你可以设置UIcolor。

Sample Project

+0

我可以在[苹果]参见(https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/Chapters/CreatingaLiveViewofaCustomObject.html)'如果你需要为创建代码一个只能在Interface Builder中运行的自定义视图,从prepareForInterfaceBuilder方法中调用该代码,但在调试后,它不会运行到此方法中,以至于无法运行 – l3adl3oy