使用动画更改MKMapView的高度和centerCoordinate会导致注释闪烁

时间:2015-08-07 15:08:59

标签: ios objective-c animation apple-maps

我有一个遗留代码来维护我拥有UIView的位置,并且在该容器内我有一个MKMapView。此mapView上有自定义注释。如果我点击它们,mapContainer和mapView会调整它们的高度,mapView的centerCoordinate也会设置为所选注释的坐标。

@property(nonatomic,weak) IBOutlet UIView *mapContainer;
@property(nonatomic,weak) MKMapView *mapView;

为了使事情变得更复杂,这三件事应该同时发生动画。动画本身工作正常,因此边界,中心等的计算应该没问题。

@weakify(self);
[UIView animateWithDuration:self.detailsPanelSlideAnimationDuration animations:^ {
    @strongify(self);

    self.mapContainer.bounds = self.mapContainerViewWithDetailsFrame;
    CGPoint center = CGPointMake(CGRectGetWidth(self.mapContainerViewWithDetailsFrame) / 2.0f, CGRectGetHeight(self.mapContainerViewWithDetailsFrame) / 2.0f);
    self.mapContainer.center = center;

    self.mapView.bounds = self.mapViewWithDetailsFrame;
    self.mapView.center = self.mapContainer.center;

    [self.mapView setCenterCoordinate:self.selectedAnnotation.coordinate animated:NO];

    // setting other frames/bounds/centers not related to the map or annotations
    ...

} completion:NULL];

问题是在此动画期间,自定义注释图像不在正确的位置。他们正朝着另一个方向前进。动画完成后,它们会跳到正确的位置,但这会导致不愉快的体验。

我会在动画之前删除它们并将它们放回去但是它们在动画期间也应该可见。你有什么建议我该做什么?

修改 我认为在动画期间强制注释更频繁地重绘会有助于解决这个问题,但我没有运气。 (我创建了一个重复的嵌套动画。在动画块中,我迭代了mapView的注释并调用了setNeedsLayout。)

0 个答案:

没有答案