1

ボタンがタッチされたときに dataBuffer を使用して UIImage に線を描画しようとしていますが、drawRect: .. メソッドが呼び出されません。(なので、描きたい線が出てこない)

どこに問題があるのか​​ 本当にわからないので、かなり多くのコードを投稿しました。申し訳ありません。

ところで、私はビューベースのアプリケーションに取り組んでいます。

ここに私のコードがあります:

-(void) viewDidLoad{
  UIImage *image = [UIImage imageNamed:@"playView2.jpg"];
  [playView setImage:image];
  [image retain];
  offScreenBuffer = [self setupBuffer];
}

- (IBAction)buttonTouched:(id)sender {
  [self drawToBuffer];
  [playView setNeedsDisplay];    
}

- (void)drawRect:(CGRect)rect{
  CGImageRef cgImage = CGBitmapContextCreateImage(offScreenBuffer);
  UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage];
  CGImageRelease(cgImage);
  [uiImage drawInRect: playView.bounds];
  [uiImage release];
}



-(void)drawToBuffer {

//                  Red  Gr   Blu  Alpha
CGFloat color[4] = {1.0, 1.0, 0.0, 1.0};

CGContextSetRGBStrokeColor(offScreenBuffer, color[0], color[1], color[2], color[3]);

CGContextBeginPath(offScreenBuffer);
CGContextSetLineWidth(offScreenBuffer, 10.0);
CGContextSetLineCap(offScreenBuffer, kCGLineCapRound);

CGContextMoveToPoint(offScreenBuffer, 30,40);
CGContextAddLineToPoint(offScreenBuffer, 150,150);

CGContextDrawPath(offScreenBuffer, kCGPathStroke);
}

-(CGContextRef)setupBuffer{      
    CGSize size = playView.bounds.size;

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast);

    CGColorSpaceRelease(colorSpace);
    return context;
}
4

2 に答える 2

1

このコードはどこにありますか? viewDidLoadはビュー コントローラ メソッド、drawRectはビュー メソッドです。playView が何であれ (おそらく UIImageView ですか?)、drawRect内部にあるカスタム UIView サブクラスである必要があり、View Controller からそれにさまざまなアイテムを渡す必要があります。

于 2011-09-26T13:51:36.510 に答える
1

私はこれが古い質問であることを知っていますが、それでも、誰かがここに出くわすかもしれません:

同じ(または非常に類似した)質問がここで正しく答えられています:

UIImageView のサブクラスで drawRect が呼び出されない

UIImageViewクラス(およびそれはサブクラス)はdrawRect、それらを呼び出す場合は呼び出さないでくださいsetNeedsDisplay

于 2012-03-04T20:53:31.790 に答える