CGContextFillRect не рисует прямоугольник? - PullRequest
2 голосов
/ 18 августа 2011

У меня есть этот код:

CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(18, 62, 66, 66));

И я просто поместил его в метод viewdidload моего представления, но мое представление не выглядит иначе, чем раньше. Я пытался сделать его действительно большим и ярко-красным, но он просто не рисует. Есть какой-то другой код инициализации, который мне нужен?

РЕДАКТИРОВАТЬ: После работы с ответами, данными мне, у меня есть это сейчас в моей veiwdidload:

[self.view addSubview:[[[imageBackground alloc] init] autorelease]];

и в imageBackground.m:

@implementation imageBackground

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.opaque = YES;
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
    darkColor = [[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:1.0] CGColor];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, darkColor);
    CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}
@end

Imagebackground.h подклассы UIView:

#import <UIKit/UIKit.h>
@interface imageBackground : UIView
@end

Я все еще не получаю результатов из этого.

РЕДАКТИРОВАТЬ 2: Ну, я решил это сам, но потом понял, что progrmr уже сказал мне, как решить это. Мне пришлось использовать [self.view addSubview:[[[imageBackground alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]]; вместо обычного alloc init.

Спасибо glorifiedhacker за огромную помощь!

Ответы [ 2 ]

7 голосов
/ 18 августа 2011

Вам необходимо создать подкласс UIView (или один из его подклассов) и переопределить метод drawRect:

- (void)drawRect:(CGRect)rect {
    CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, darkColor);
    CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}

, чтобы получить действительный графический контекст, в который вы можете рисовать. Из документации Apple на UIView :

Просмотр чертежа происходит по мере необходимости. Когда вид впервые отображается, или когда все или его часть становится видимой из-за изменений макета, Система просит представление нарисовать его содержимое. Для представлений, которые содержат пользовательский контент, используя UIKit или Core Graphics, система вызывает DrawRect: метод. Ваша реализация этого метода отвечает за рисование содержимого представления в текущей графике контекст, который устанавливается системой автоматически перед вызовом Этот метод. Это создает статическое визуальное представление вашего просмотреть содержимое, которое затем можно отобразить на экране.

1 голос
/ 15 сентября 2013

Самый простой способ без подклассов - это процедура для всего кода.

void DrawRectFrame(CGContext c, CGRect rc)
{
    CGContextMoveToPoint(c,     rc.origin.x,                  rc.origin.y);
    CGContextAddLineToPoint(c,  rc.origin.x+rc.size.width,    rc.origin.y);

    CGContextMoveToPoint(c,     rc.origin.x+rc.size.width,    rc.origin.y);
    CGContextAddLineToPoint(c,  rc.origin.x+rc.size.width,    rc.origin.y+rc.size.height);

    CGContextMoveToPoint(c,     rc.origin.x+rc.size.width,    rc.origin.y+rc.size.height);
    CGContextAddLineToPoint(c,  rc.origin.x,                   rc.origin.y+rc.size.height);

    CGContextMoveToPoint(c,     rc.origin.x,                   rc.origin.y+rc.size.height);
    CGContextAddLineToPoint(c,  rc.origin.x,                   rc.origin.y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...