当用户在屏幕上收缩时,我需要不断地改变我的MKCircle的半径。因为它的radius属性是只读的,所以我不断地删除并重新创建圆和渲染器,我相信这会在用户握手时产生“闪烁”效果。它不断地出现/消失,当“动画”,这看起来真的很糟糕的视觉,创造了一个糟糕的用户体验。下面是我的代码:
//this method may be called many times a second.
-(void)refreshRadius{ //called when user pinches after updating to correct radius.
    if(radiusCircle){
        [self.mapView removeOverlay:radiusCircle];
    }
    radiusCircle = [MKCircle circleWithCenterCoordinate:userCoordinates radius:radius];
    [self.mapView addOverlay:radiusCircle level:MKOverlayLevelAboveLabels];
}
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
    if(overlay == radiusCircle){
        MKCircleRenderer *renderer = [[MKCircleRenderer alloc] initWithCircle:radiusCircle];
        renderer.strokeColor = [UIColor colorWithWhite:1 alpha:0.5];
        renderer.lineWidth = 0.8;
        renderer.fillColor = [UIColor colorWithRed:0.3 green:0.36 blue:0.7 alpha:0.2];
        return renderer;
    }else{
        return nil;
    }
}如何在比例上平滑地对半径进行动画处理?
发布于 2015-01-14 10:31:13
经过一些试验,我幸运地找到了一个解决方案。然而,尽管它现在工作得很好,但它很容易在未来的iOS SDK中进行内部更改。我首先使用KVC设置了只读属性"radius“。然后,我已经使我的渲染器的路径无效,使它立即使用新的半径重新绘制自己。这不是最流畅的-60fps-动画-但它工作得真的很好。代码如下:
[radiusCircle setValue:@(radius) forKey:@"radius"];
[renderer invalidatePath];radiusCircle是我的MKCircle实例,renderer是我的圆形渲染器。它起作用了。
https://stackoverflow.com/questions/27934748
复制相似问题