自定义绘图在退出前不可见

时间:2011-01-17 10:41:37

标签: ios cocoa-touch uiview cgcontext

在我的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 个答案:

答案 0 :(得分:1)

回答我自己,但这就是我今天学到的东西:

所有自定义绘图都必须位于DrawRect 。我看到的小故障行为是DrawRect被视图消失或恢复的结果。移动了,它有效。

自定义重绘的位置仍然关闭,但这是另一个问题。