当前位置: 首页 > 知识库问答 >
问题:

iOS 7 UIView动画与持续时间:...立即运行

漆雕疏珂
2023-03-14

我在动画制作方法上有问题

我已经为GoogleMap创建了自己的CalloutBubble

@interface CalloutView : UIView
@property (nonatomic) MapMarker *marker;
@end

@implementation {   
    UIView *titleView;
    UILabel *titleLabel, *addressLabel;
}

//another init methods aren't shown

- (void)setMarker:(MapMarker *)marker
{
    _marker = marker;
    titleLabel.text = marker.university.name;
    addressLabel.text = marker.university.address;
    [titleLabel sizeToFit];
    titleLabel.minX = 0;
    [titleLabel.layer removeAllAnimations];
    if (titleLabel.width > titleView.width)
        [self runningLabel];
}

- (void)runningLabel
{
    CGFloat timeInterval = titleLabel.width / 70;
        [UIView animateWithDuration:timeInterval delay:1.0 options:UIViewAnimationOptionOverrideInheritedDuration | UIViewAnimationOptionRepeat animations:^{
            titleLabel.minX = -titleLabel.width;
        } completion:^(BOOL finished) {
            titleLabel.minX = titleView.width;
            [self runningLabel];
        }];
}

@end

在我的视图控制器中,我创建属性

@implementation MapVC {
    CalloutView *calloutView;
}

然后,如果我尝试用任何方法创建calloutView,所有这些都可以很好地处理动画,但如果我用Google map方法返回视图

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker
{
    if (!calloutView)
        calloutView = [[CalloutView alloc] initWithFrame:CGRectMake(0, 0, 265, 45.5)];
    calloutView.marker = (MapMarker *)marker;
    return calloutView;
}

我的动画会立即在calloutView中运行,也会立即调用completion,然后再次调用runningLabel方法,因此它不会像必须的那样工作。所有帧都正常,并且始终超过4秒。我尝试编写静态时间间隔,如10.0,但动画再次立即运行,并且在完成块中标记“完成”,始终为“是”。所以它在一秒钟内呼叫了100多次=(

我在iOS7中创建应用程序。我尝试使用不同的动画选项:

UIViewAnimationOptionLayoutSubviews           
UIViewAnimationOptionAllowUserInteraction     
UIViewAnimationOptionBeginFromCurrentState    
UIViewAnimationOptionRepeat                   
UIViewAnimationOptionAutoreverse              
UIViewAnimationOptionOverrideInheritedDuration 
UIViewAnimationOptionOverrideInheritedCurve   
UIViewAnimationOptionAllowAnimatedContent     
UIViewAnimationOptionShowHideTransitionViews 
UIViewAnimationOptionOverrideInheritedOptions  

但没有结果。

这个谷歌地图方法有什么错,为什么我的动画会立即运行?

PS minX,宽度-我的类别。minX设置frame.origin.X。这个类别都很好。

共有1个答案

文喜
2023-03-14

删除UIViewAnimationOptionRepeat选项或注释完成Block minX设置:

- (void)runningLabel
{
    CGFloat timeInterval = titleLabel.width / 70;
        [UIView animateWithDuration:timeInterval delay:1.0 options:UIViewAnimationOptionOverrideInheritedDuration | UIViewAnimationOptionRepeat animations:^{
            titleLabel.minX = -titleLabel.width;
        } completion:^(BOOL finished) {
            //titleLabel.minX = titleView.width; //this is the problem, you should not set minX again while  UIViewAnimationOptionRepeat also is animation option
            [self runningLabel];
        }];
}
 类似资料:
  • 我不知道如何在iOS7中设置NSLayoutConstraint动画持续时间。这是我的代码:

  • 本文向大家介绍jquery animate动画持续运动的实例,包括了jquery animate动画持续运动的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 如上,想要实现左右持续运动,则把该动画封装为一个函数,再反复调用就好。 以上这篇jquery animate动画持续运动的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我有一个CollectionView,我想在用户选择的CollectionViewCell内创建一个动画。我选择使用animateKeyframesWithDuration,因为我想一步一步地创建自定义动画。我的代码如下所示: 选中此选项后,将在自定义CollectionViewCell内执行。问题是我想强制在某个特定点立即停止动画。但当我这样做时,动画并没有完全停止,它只是将剩余的动画移动到另一

  • 我想安排一系列动画,在屏幕上动画介绍文字。最后一个动画在完成时,应该触发运行游戏的游戏勾号逻辑。 出于某种原因,一切都在立即发生。有人能解释为什么会发生这种情况吗?或者有更好的选择吗?

  • 我想要实现的是:拥有几个UILabel并能够按顺序高亮显示它们,我的意思是我想更改它们的textColor、fontSize和位置。因此,我成功地编写了一个演示,它采用一组UIView并按顺序突出显示它们(更改其背景颜色)。 阅读了Andrew Fuchs对问题的回答后,您知道执行几个连续UIView动画的最佳方式吗?引用了多个没有嵌套块的UIView动画 然而,当我在我的代码中用UILabel代

  • 因此,假设您有一个父相对布局,其高度设置为“wrap\u content”。此布局中有另一个默认隐藏的布局。我是这样揭示的: 这是相应的anim文件。它基本上将视图从底部移动到顶部。 我希望父视图会根据子视图的动画改变其高度。但是,当动画开始时,父视图会立即向上移动,而子视图仍在动画中。感觉就像在动画完成之前调用了setVisual。 所以要解决这个问题,我会将孩子的高度从0缩放到100%,但是我