Начинающий вопрос по iphone: рисование прямоугольника. Что я делаю неправильно? - PullRequest
7 голосов
/ 09 июня 2009

Пытаюсь выяснить, что я здесь делаю не так. Пробовал несколько вещей, но я никогда не вижу этот неуловимый прямоугольник на экране. Прямо сейчас это все, что я хочу сделать - просто нарисовать один прямоугольник на экране.

Я получаю «недопустимый контекст» на всем, кроме CGContextSetRGBFillColor (). Получение контекста после этого кажется мне немного неправильным, но я не дома, смотря на примеры, которые я использовал вчера вечером.

Я тоже что-то напутал? Я действительно хотел бы сделать это по крайней мере сегодня вечером ...

- (id)initWithCoder:(NSCoder *)coder
{
  CGRect myRect;
  CGPoint myPoint;
  CGSize    mySize;
  CGContextRef context;

  if((self = [super initWithCoder:coder])) {
    NSLog(@"1");
    currentColor = [UIColor redColor];
    myPoint.x = (CGFloat)100;
    myPoint.y = (CGFloat)100;
    mySize.width = (CGFloat)50;
    mySize.height = (CGFloat)50;
    NSLog(@"2");
    // UIGraphicsPushContext (context);
    NSLog(@"3");
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
    context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, currentColor.CGColor);
    CGContextAddRect(context, myRect);
    CGContextFillRect(context, myRect);
  }

  return self;

}

Спасибо

Шон.

Ответы [ 2 ]

40 голосов
/ 18 июля 2009

Начиная с шаблона на основе вида, создайте проект с именем Drawer . Добавьте класс UIView в свой проект. Назовите его SquareView (.h и .m).

Дважды щелкните DrawerViewController.xib , чтобы открыть его в Интерфейсном Разработчике . Измените общее представление на SquareView в Identity Inspector (команда-4) с помощью всплывающего меню Class . Сохраните и вернитесь к Xcode .

Поместите этот код в метод drawRect: * вашего SquareView.m файла, чтобы нарисовать большой изогнутый пустой желтый прямоугольник и маленький зеленый прозрачный квадрат:

- (void)drawRect:(CGRect)rect;
{   
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line

    CGContextBeginPath(context);

    CGContextMoveToPoint(context, 50.0, 50.0); //start point
    CGContextAddLineToPoint(context, 250.0, 100.0);
    CGContextAddLineToPoint(context, 250.0, 350.0);
    CGContextAddLineToPoint(context, 50.0, 350.0); // end path

    CGContextClosePath(context); // close path

    CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it

    CGContextStrokePath(context); // do actual stroking

    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent
    CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner
}

Вам не нужно вызывать этот метод для рисования. Контроллер вашего вида скажет, чтобы представление рисовало себя хотя бы один раз, когда программа запускается и файлы NIB активируются.

9 голосов
/ 09 июня 2009

Вы не должны помещать код CG в initWithCoder . Это сообщение следует использовать только для целей ИНИЦИАЛИЗАЦИИ.

Введите код для рисования в:

- (void)drawRect:(CGRect)rect

Если вы создаете подкласс UIView ...

...