GMSGroundOverlay 애니메이션-CATiledLayer를 사용해야합니까?


99

iOS 용 Google지도 SDK 최신 버전 1.2.1.2944를 사용하여 GMSGroundOverlay. 사용자는 이미지 시퀀스를 제어 할 수 있으므로 애니메이션을 사용하는 UIImage것은 슬프게도 불가능하므로 UIImage즉시 로드 하고 있습니다. 이 ( GMSGroundOverlay.icon가) UIImage업데이트중인로 설정되었습니다.

높은 메모리 사용량 외에도 1000px x 1000px 이상의 UIImage사용 을 오버레이하려고 할 때마다 충돌이 발생한다는 한계에 부딪힌 것 같습니다 GMSGroundOverlay.icon. UIImage1000px x 1000px를 참조 하면 충돌이 발생합니다.

CATiledLayer이미지를 처리하여 메모리에만로드 한 다음 아이콘 속성에로드하는 데 활용해야한다는 생각이 GMSGroundOverlay들지만, CATiledLayeriOS SDK 용 Google지도를 사용 하고 이미지를 애니메이션으로 시퀀싱 한 경험이있는 사람이 GMSGroundOverlay있습니까?


충돌에 대해보고있는 임계 값이 훨씬 낮지 만 동일한 문제가 있습니다. 이에 대한 해결책을 찾고 싶습니다.
eric.mitchell 2013

나는 모든 종류의 GMSOverlays에 대한 솔루션을 원합니다
Daij-Djan

나는 당신이 어떻게 TiledLayer를 사용하고 싶은지
모르겠다

답변:


1

pressanswer.com에서이 답변을 받았습니다. 도움이 될 것 같습니다.

현재는 애니메이션에 "위치"키 경로를 사용할 수 없으므로 "위도"및 "경도"키 경로를 별도로 사용하여 애니메이션을 적용했습니다.

먼저 점을 계산하고 위도 값 (y)과 경도 (x)에 대해 하나씩 두 개의 개별 배열에 추가 한 다음 CAKeyFrameAnimation의 values ​​속성을 사용하여 애니메이션을 적용합니다. CAKeyFrameAnimation 개체 2 개 (각 축당 1 개)를 만들고 CAAnimationGroup을 사용하여 그룹화하고 애니메이션을 적용하여 원을 만듭니다.

내 방정식에서 각 축의 반경 길이를 변경하여 타원형 경로도 생성 할 수 있습니다.

NSMutableArray *latitudes = [NSMutableArray arrayWithCapacity:21];
    NSMutableArray *longitudes = [NSMutableArray arrayWithCapacity:21];
    for (int i = 0; i <= 20; i++) {
        CGFloat radians = (float)i * ((2.0f * M_PI) / 20.0f);

        // Calculate the x,y coordinate using the angle
        CGFloat x = hDist * cosf(radians);
        CGFloat y = vDist * sinf(radians);

        // Calculate the real lat and lon using the
        // current lat and lon as center points.
        y = marker.position.latitude + y;
        x = marker.position.longitude + x;


        [longitudes addObject:[NSNumber numberWithFloat:x]];
        [latitudes addObject:[NSNumber numberWithFloat:y]];
    }

    CAKeyframeAnimation *horizontalAnimation = [CAKeyframeAnimation animationWithKeyPath:@"longitude"];
    horizontalAnimation.values = longitudes;
    horizontalAnimation.duration = duration;

    CAKeyframeAnimation *verticleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"latitude"];
    verticleAnimation.values = latitudes;
    verticleAnimation.duration = duration;

    CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
    group.animations = @[horizontalAnimation, verticleAnimation];
    group.duration = duration;
    group.repeatCount = HUGE_VALF;
    [marker.layer addAnimation:group forKey:[NSString stringWithFormat:@"circular-%@",marker.description]];

이것은 GMSGroundOverlay가 아닙니다. GMSMarker를 표시하고 있습니다. 오버레이는 '레이어'에 동일한 액세스를 제공하지 않습니다
Erik Gross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.