0

UIView に char 配列を描画しようとしています。問題は、ビューが自動的に更新されないため、文字が表示されないことです。画面のあちこちに触れると、それが表示されます (文字の一部のみが表示される場合もあります)。新しい文字セットを再描画するとき (配列が更新されるとき)、古いものもクリアされません。以前に描画された更新された配列を再描画しても UIView からクリアされませんが、同じビューに上書きして両方を表示するだけです。

これが私のコードです:

MyView クラスで。

-(void)drawRect:(CGRect)rect
{
  context=UIGraphicsGetCurrentContext();
}

-(void)initializeWithChar:(char)characterToDisplay andAttribute:(Byte)attribute
{
    displayChar = characterToDisplay;
    displayCharAttribute = attribute;
}

-(void)setNeedsDisplayInRect:(CGRect)rect{

    NSString *charString;
    UIGraphicsPushContext(context);
    charString = [NSString stringWithFormat:@"%c",displayChar];

    // while background color is black.
    CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); 

    [charString drawInRect:CGContextConvertRectToUserSpace(context, rect) 
                  withFont:[UIFont fontWithName:@"Courier New" size:10] 
             lineBreakMode:NSLineBreakByWordWrapping 
                 alignment:NSTextAlignmentLeft];

    UIGraphicsPopContext();
}

-(void)clearScreenInRect:(CGRect) rect{
    [self.viewForBaselineLayout setClearsContextBeforeDrawing:YES];
    [self.viewForBaselineLayout setOpaque :NO];
    CGContextClearRect (context,rect);

    // I TRIED THIS AS WELL -> but dosen't work..
    //CGContextSetFillColorWithColor(contxt, [UIColor blackColor].CGColor);
    //CGContextFillRect(contxt, rect) ;

}

writeDrawView クラス

// CODE BELOW is DRAWING FRESH ARRAY ON VIEW

//this method draw a sign in form on view (content are placed in SignInFormArray)
-(void)writeToDrawViewFrom_SignInFormArray{
 for (int rownumber = 0; rownumber < 10; rownumber++) {
    for (int columnNumber = 0; columnNumber < 30; columnNumber++) {
              [myView initializeWithChar:SignInFormArray[rownumber][columnNumber] andAttribute:Attribute[rownumber][columnNumber]];
              [myView setNeedsDisplayInRect:CGRectMake(columnNumber*12 , rownumber*30, 12, 30)];
         }
   }
}

-(void)clearButtonClicked{
         for (int rownumber = 0; rownumber < 10; rownumber++) {
            for (int columnNumber = 0; columnNumber < 30; columnNumber++) {
                [myView clearScreenInRect:CGRectMake(columnNumber*12 , rownumber *30  , 12, 30)];
                }
        }
}


// CODE BELOW is UPDATING VIEW FROM UPDATED ARRAY

//this method draw a home page menu form on view (content are placed in HomePageMenuArray)
-(void)writeToDrawViewFrom_HomePageMenuArray{
 for (int rownumber = 0; rownumber < 10; rownumber++) {
    for (int columnNumber = 0; columnNumber < 30; columnNumber++) {
              [myView initializeWithChar:HomePageMenuArray[rownumber][columnNumber] andAttribute:Attribute[rownumber][columnNumber]];
              [myView setNeedsDisplayInRect:CGRectMake(columnNumber*12 , rownumber*30, 12, 30)];
         }
   }
}
4

2 に答える 2

0

@amar: drawRect: のドキュメントには、「このメソッドを自分で直接呼び出すべきではありません」と明示的に記載されていることに注意してください。

私も同じ問題を抱えています:以前に描画された更新された配列を再描画してもUIViewからクリアされませんが、同じビューに上書きして両方を表示します。また、iOS キーボードの任意のキーが押されたときに、UIView の特定の場所に文字を描画する必要があります。

于 2013-05-16T14:42:49.207 に答える