2013-06-23 46 views
0

現在我在視圖的drawRect中使用UIBezierPath和moveToPoint/addLineToPoint。 這個相同的視圖從viewController接收到touchesMoved。它修改時,我繪製多邊形所使用,像這樣的posxposy變量:如何創建超過1000條邊/線的可移動和可調整大小的多邊形?

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

不幸的是,性能是可怕的,多邊形離開時,我將它移動軌跡。

什麼是實現我想要做的最好的方法?

編輯:drawRect。 polys是一個帶有poly對象的NSMutableArray。每個poly都是一個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]; 
} 
+0

你可以發佈多一點的代碼?整個'drawRect'方法? –

+0

是的,我可以。剛編輯它。 – HSNN

回答

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 

只需再添加視圖在您的應用程序,可能使其全屏顯示。

+0

該多邊形已經建好。我希望使用能夠移動和調整(捏)它。不過,我有大約60個多邊形,每個邊多於1000個邊。當我嘗試移動它時,性能非常糟糕。 – HSNN

+0

嗯,加起來60000面......如何將每個多邊形轉換爲位圖和縮放/旋轉/翻譯它? –

+0

那會很棒。有沒有一種方法可以將多邊形自動轉換爲位圖?你知道任何教程解釋如何做到這一點嗎? – HSNN

相關問題