私は iOS と Objective-C に不慣れで、何が間違っているのか、何をしようとしているのかを理解したいと思っています。
ポリゴンで作られた地図を描こうとしています。今はそれを使っUIBezierPath
て描いています。moveToPoint
andを使用して約 88 個のポリゴンを描画addLineToPoint
し、ランダムな色で塗りつぶします。ただし、これらのポリゴンの一部には 1000 を超えるラインがあります。マップ全体には 30,000 を超える行があります。MapView
の中でやっていdrawRect
ます。
現在、プロジェクト全体は次のように構成されています。
ViewController
は(から継承) をviewDidLoad
開始し、次のようにサブビューとして追加します。MapView
UIView
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];
MapView
Poly
に追加されたいくつかのオブジェクトに 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 座標を に送信します。このメソッドは次のようになります。CGFloat
ViewController
touchesMoved
MapView
-(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 回描画され、その後ろに点滅する軌跡を残すマップが作成されます。
どうすればこれを修正できますか?