0

現在、私は UIBezierPath を使用しており、moveToPoint/addLineToPointビューのdrawRect. この同じビューはtouchesMoved、viewController から受け取ります。次のように、ポリゴンを描画するときに使用される変数posxと変数を変更します。posy

[path addLineToPoint:CGPointMake([p.getx floatValue]+posx, [p.gety floatValue]+posy)]

残念ながら、パフォーマンスはひどいもので、ポリゴンを動かすたびに軌跡が残ります。

私がやろうとしていることを達成するための最良の方法は何ですか?

編集: drawRect。polysオブジェクトを持つ NSMutableArraypolyです。各ポリゴンは 1 つの x/y ポイントです。

- (void)drawRect:(CGRect)rect{
UIBezierPath* path;
UIColor* fillColor;
path = [UIBezierPath bezierPath];
for (int i = 0; i < [polys count]; i++){
    poly *p = [polys objectAtIndex:i];
    if (i == 0){
        [path moveToPoint:CGPointMake([p.getx floatValue]+posx, [p.gety floatValue]+posy)];
    }else{
        [path addLineToPoint:CGPointMake([p.getx floatValue]+posx, [p.gety floatValue]+posy)];
        fillColor = [UIColor blueColor]; // plan to use a random color here
        }
    }
[path closePath];
[fillColor setFill];
[path fill];
}
4

1 に答える 1

1

あなたの問題を理解していません。私の推測では、ユーザーの指でポリゴンを描きたいと思っています。私は完全に機能するこの小さなクラスを持っています。おそらくそれが役立つでしょう:

@implementation View {
    NSMutableArray* _points;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    self.backgroundColor = [UIColor whiteColor];

    _points = [NSMutableArray array];

    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // Clear old path
    [_points removeAllObjects];

    UITouch* touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];

    [_points addObject:[NSValue valueWithCGPoint:p]];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch* touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];

    [_points addObject:[NSValue valueWithCGPoint:p]];

    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect
{
    UIBezierPath* path = [UIBezierPath bezierPath];

    for (int i = 0; i < _points.count; i++){
        CGPoint p = [_points[i] CGPointValue];
        if (i == 0){
            [path moveToPoint:p];
        }
        else {
            [path addLineToPoint:p];
        }
    }

    [path closePath];

    UIColor* color = [UIColor blueColor];
    [color setFill];
    [path fill];
}

@end

アプリのどこかにビューを追加するだけで、全画面表示にすることができます。

于 2013-06-24T01:16:21.457 に答える