私はobjective-cの経験は少しありますが、多くはありません。TouchEvents を介して UIBezierPath をレンダリングしようとしています (つまり、指で線を引きます)。さらに、後で移動または変更できるように、すべての bezierPath を NSMutableArray (パス) に保存したいと考えています。これは、最も単純なアプリケーションです。私のヘッダーは次のようになります。
@interface ViewController : UIViewController{
UIBezierPath* path;
NSMutableArray* paths;
int curThickness;
}
@property (strong, nonatomic) IBOutlet UIView *scene;
@end
シーンは、画面全体を占めるビューであり、パスを描画しようとしている場所です。
関連する実装は次のようになります。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
NSLog(@"Starting Path");
path = [UIBezierPath bezierPath];
path.lineWidth = 15.0f;
path.lineCapStyle = kCGLineCapRound;
path.lineJoinStyle = kCGLineJoinRound;
path.flatness = 2.0;
path.miterLimit = 4.0;
[path moveToPoint:[touch locationInView:scene]];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:scene]];
[scene setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
NSLog(@"I'm supposed to be drawing something...");
[[UIColor redColor] set];
[path stroke];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"No more touchy feelies");
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:scene]];
[paths addObject:path];
[scene setNeedsDisplay];
NSLog(@"number of paths: %i.", paths.count);
}
エミュレーターで実行すると、すべてのイベントが登録され、DrawRect が呼び出されず、画面に何も描画されず (touchesEnded の最後に [パス トレース] を追加しても)、パスは空ではなく、paths.countパスをいくつトレースしてもゼロのままです。
私は何が欠けていますか?いつものように、あなたの助けは常に大歓迎です.