当GMSMapView移动时,如何为NSLayoutConstraint设置动画?

时间:2017-03-10 06:39:04

标签: ios animation

我希望在用户在我的iOS应用程序中滚动地图(类型为GMSMapView)时动画按钮移动:

- (void)setButtonHidden:(bool)hidden
    [UIView animateWithDuration:1 animations:^{
        [_myButton setAlpha:hidden ? 0 : 1];
        // or so:
        [_myButtonConstraint setConstant:hidden ? -40 : 92];
        [[self view] layoutIfNeeded];
    }
}

按钮显示动画效果很好,但隐藏不是动画。

我想是因为我从[self setButtonHidden:YES]方法调用了mapView:willMove:,之后地图视图会被动画化。

如何组合不同的动画,在本例中是我的动画和GMSMapView动画?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。原因是GMSMapView bug

解决方案是:

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView animateWithDuration:1 animations:^{
        [_myButton setAlpha:hidden ? 0 : 1];
        // or so:
        [_myButtonConstraint setConstant:hidden ? -40 : 92];
        [[self view] layoutIfNeeded];
        // or any other animation
    }];
});

谢谢大家的帮助!

答案 1 :(得分:0)

您可以组合动画,但hidden可以打开/关闭。 首先调整alpha(正如您所做,但不是隐藏),并在完成块中设置隐藏。

[UIView animateWithDuration:1
                     animations:^{
                         _myButton.alpha = hidden ? 0 : 1;
                         // or so:
                        [_myButtonConstraint setConstant:hidden ? -40 : 92];
                        [[self view] layoutIfNeeded];
                     } completion:^(BOOL finished) {
                         _myButton.hidden = hidden ? YES : NO;
                     }];