1

私はこの画像のようなカスタムビューを持っていましたが、それは機能します( drawRectで設定したテキストフォントとテキストカラー)

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

*テキスト 01 画像*

*テキスト 02 _______ *

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

Interface Buildeからフォントと色を設定したいのですが、エラーが発生します:

IB Designables: AvailableSeatView のインスタンスのレンダリングに失敗しました: ビューのレンダリングに 200 ミリ秒以上かかりました。描画コードのパフォーマンスが低下する可能性があります。

ここに私のコード:

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

Google で検索した後、次の投稿見つけ まし

4

1 に答える 1