1

MKOverLayとして追加している円をアニメートしたいと思います。画面上部からドロップしてほしい。デリゲートメソッドを使用してアニメーション化するにはどうすればよいですか?それともオーバーレイの追加ですか?誰かが私を正しい方向に向けることができますか?ありがとう!

私はこれをmapViewデリゲートメソッドに持っています

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{

    if([overlay isKindOfClass:[MKCircle class]]) {
        // Create the view for the radius overlay.
        MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
        circleView.strokeColor = [UIColor whiteColor];
        circleView.fillColor = [[UIColor blueColor] colorWithAlphaComponent:0.2];

        return circleView;
    }

    return nil;
}

そして、私は次のようにoverLaysを追加します:

        MKCircle *circle = [MKCircle circleWithCenterCoordinate:userCoord radius:200];
        [mainMapView addOverlay:circle];
4

2 に答える 2

1

ここにいくつかの未テストのコードがあります。うまくいく場合は、アニメーションを変更する必要があるかもしれません。

- (void)mapView:(MKMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews
{
    for (MKOverlayView *view in overlayViews) {

        CGRect endFrame = view.frame;
        view.frame = CGRectMake(endFrame.origin.x, endFrame.origin.y-500, 0, 0);

        [UIView animateWithDuration:1.0 animations:^{
            view.frame = endFrame;
        }];
    }
}
于 2012-08-24T13:04:17.117 に答える
1

スケールアップ + フェードイン アニメーションが必要な場合は、次のようにします。

@interface MyMapOverlayView : UIView<CAAction>
@end

@implementation MyMapOverlayView

- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
    if ( [ event isEqualToString:@"onOrderIn" ] )
    {
        return self ;
    }

    return [ super actionForLayer:layer forKey:event ] ;
}

- (void)runActionForKey:(NSString *)event object:(id)anObject arguments:(NSDictionary *)dict
{
    if ( [ event isEqualToString:@"onOrderIn" ] )
    {
        {
            CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"transform" ] ;
            anim.fromValue = [ NSValue valueWithCATransform3D:CATransform3DMakeScale( 0.1f, 0.1f, 1.0f ) ] ;
            [ self.layer addAnimation:anim forKey:nil ] ;
        }

        {
            CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"opacity" ] ;
            anim.fromValue = @0.0f ;
            [ self.layer addAnimation:anim forKey:nil ] ;
        }
    }
}

@end

注:オーバーレイがマップ ビューに追加されたときにこれらのアニメーションを追加する方法を推測しましたが、テストしていません。実験する必要があります。ビューの作成時にそれらを設定できる場合があります。

更新:テストしましたが、うまくいくようです。

于 2012-09-04T17:48:31.387 に答える