Пользовательский рисунок невидим до выхода - PullRequest
0 голосов
/ 17 января 2011

В моем подклассе UIView, пользовательский рисунок. Исходный чертеж работает нормально, т. Е. При запуске из viewDidLoad или от жеста смахивания или встряхивания, который очищает экран и перерисовывает.

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

Вот как я настроен:

- (void)drawRect:(CGRect)rect; {
    cgRect = [[UIScreen mainScreen] bounds];
    cgSize = cgRect.size;
        context = UIGraphicsGetCurrentContext();

    for (int i=0; i<(cgSize.width / spacing); i++) {
        for (int j=0; j<(cgSize.height / spacing); j++) {
            [self drawObjectAtPosX:i*spacing andY:j*spacing withId:i*(cgSize.height / spacing) + j];
         }
     }

Есть невидимые кнопки над определенными объектами. Когда они нажаты, объект должен быть перерисован другим цветом:

-(void)buttonPressed:theButton {
int which = [theButton tag];
if ([[objectArray objectAtIndex:which] shouldBeRedrawn]) {
        [self redrawObjectforID:which];
    }
}

-(void)redrawObjectforID:(int)which {
        myObject *chosenOne = [objectArray objectAtIndex:which];
        CGFloat m_x = chosenOne.x;
        CGFloat m_y = chosenOne.y;
        context = UIGraphicsGetCurrentContext();
        CGContextSetRGBStrokeColor(context, 205/255.0,173/255.0,0.0,1.0); // LINE color
        CGContextSetRGBFillColor(context, 205/255.0,197/255.0,0.0,1.0); // FILL color
        CGContextTranslateCTM(context, m_x, m_y);
        CGContextRotateCTM(context, chosenOne.rotation);
        for (int i=0; i<4; i++) {
            [self drawObjectSegmentatX:m_x andY:m_y forID:which inContext:context]; // custom drawing stuff
            CGContextRotateCTM(context, radians(90));
        } 
        CGContextRotateCTM(context, -chosenOne.rotation);
        CGContextTranslateCTM(context, -m_x, -m_y);
}

1 Ответ

1 голос
/ 17 января 2011

Отвечая на мой вопрос, но вот что я узнал сегодня:

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

Расположение пользовательского перерисовки все еще отключено, но это другой вопрос.

...