3

私は iOS と Objective-C に不慣れで、何が間違っているのか、何をしようとしているのかを理解したいと思っています。

ポリゴンで作られた地図を描こうとしています。今はそれを使っUIBezierPathて描いています。moveToPointandを使用して約 88 個のポリゴンを描画addLineToPointし、ランダムな色で塗りつぶします。ただし、これらのポリゴンの一部には 1000 を超えるラインがあります。マップ全体には 30,000 を超える行があります。MapViewの中でやっていdrawRectます。

現在、プロジェクト全体は次のように構成されています。

ViewControllerは(から継承) をviewDidLoad開始し、次のようにサブビューとして追加します。MapViewUIView

    self.pview = [[MapView alloc]init];
    self.pview.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height );
    [self.view addSubview:pview];

MapViewPolyに追加されたいくつかのオブジェクトに csv ファイルをロードしますNSMutableArray。APolyには X/Y 座標があります (フロート、私は を使用してCGFloatいます)。

MapViewの drawRect は次のようになります。

- (void)drawRect:(CGRect)rect{
    int oldtemp = 0;
    UIBezierPath* path;
    UIColor* fillColor;
    path = [UIBezierPath bezierPath];
    for (int i = 0; i < [polys count]; i++){
        poly *p = [polys objectAtIndex:i];
        int temp = p.getPolyid.intValue;
        if (temp == oldtemp){
            [path moveToPoint:CGPointMake([p.getx floatValue]+posx, [p.gety floatValue]+posy)]; // more about posx/posy after this code block
        }else{
            [path addLineToPoint:CGPointMake([p.getx floatValue]+posx, [p.gety floatValue]+posy)];
            fillColor = [UIColor blueColor]; // not using a random color here, performance is still bad
            }
        }
    [path closePath];
    [fillColor setFill];
    [path fill];
}

posxそしてsですposy。は x/y 座標を に送信します。このメソッドは次のようになります。CGFloatViewControllertouchesMovedMapView-(void)moveX:(CGFloat)x Y:(CGFloat)y{

-(void)moveX:(CGFloat)x Y:(CGFloat)y{
    if (x > initx){
        posx += (x - initx);
    }else{
        posx -= (initx - x);
    }
    if (y > inity){
        posy += (y - inity);
    }else{
        posy -= (inity - y);
    }
    initx = x;
    inity = y;
    [self setNeedsDisplay]; //should this be here? My map doesn't redraw without it.
}

このすべての結果、おそらく 2 秒ごとに 1 回描画され、その後ろに点滅する軌跡を残すマップが作成されます。

どうすればこれを修正できますか?

4

0 に答える 0