如何在动画完成时在 imageview 中启用交互

Posted

技术标签:

【中文标题】如何在动画完成时在 imageview 中启用交互【英文标题】:How to enable interaction in imageview on animation completion 【发布时间】:2016-11-10 10:53:27 【问题描述】:

我正在使用CABasic 动画来移动UIImageViewUIImageView 没有检测到触摸现在如何在动画完成后启用用户交互?

[ImageView setUserInteractionEnabled:NO];
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
theAnimation.duration=1;
theAnimation.repeatCount=1;
theAnimation.autoreverses=NO;

theAnimation.fromValue=[NSNumber numberWithFloat:0];
theAnimation.toValue=[NSNumber numberWithFloat:self.view.frame.size.width/2];

theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;

[CATransaction setCompletionBlock:^
    NSLog(@"finished");
    self.view.userInteractionEnabled = true;
];
[ImageView.layer addAnimation:theAnimation forKey:@"slide"];
[CATransaction commit];

【问题讨论】:

你设置了[ImageView setUserInteractionEnabled:NO];self.view.userInteractionEnabled = true;你应该试试[ImageView setUserInteractionEnabled:YES]; [CATransaction setCompletionBlock:^ NSLog(@"finished"); self. ImageView.userInteractionEnabled = true; ]; 它不工作 为什么不在UIbutton中添加图像,在动画之后你可以启用按钮......这里可以检查动画...... 使用 self.aButton.enabled = NO/YES;和 [aButton setImage:image forState:UIControlStateNormal]; 【参考方案1】:

你可以试试这个。

BOOL animationPause;

ImageView = [[UIImageView alloc]initWithFrame:CGRectMake(250, 300, 100, 100)];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(ImageViewClicked)];
    singleTap.numberOfTapsRequired = 1;
    [ImageView addGestureRecognizer:singleTap];

    [self.view addSubview:ImageView];

    ImageView.image = [UIImage imageNamed:@"earth.jpeg"];

    [UIView animateWithDuration:1.0 animations:^
        for (int i = 0; i<5; i++) 
             ImageView.frame = CGRectMake(ImageView.frame.origin.x, ImageView.frame.origin.y+i+5, ImageView.frame.size.width, ImageView.frame.size.height)  ;
            if (i==4) 
                ImageView.userInteractionEnabled = YES;

            
if (animationPause == YES)
                [UIView setAnimationDidStopSelector:@selector(animateStop)];
            else
                [UIView setAnimationDidStopSelector:@selector(Resume)];
        

        
    ];

没有必要使用CABasicAnimation 实际上在你的场景中你的图像视图最初有一些框架并且你已经添加了手势或其他东西。当您为图像设置动画时,您的图像将根据动画要求变为 x 或 y。一个仍处于初始帧的图像视图帧。所以你的点击事件方法会被调用。

但是是的,当您单击特定框架时,​​无论是否有 imageView,您都会注意到您的方法将被调用。

您已管理 animationPause 以暂停和恢复动画。 希望它会奏效。如果您还有任何疑问,请告诉我

【讨论】:

其实我想暂停和恢复动画..你的代码可以吗? 你可以做到。只需要一些你想暂停或恢复的逻辑。是的,您也可以使用此代码。但是如果你想使用你的代码不用担心,只要在你做动画的时候改变你的 imageView 框架。 我希望你明白了 欢迎您,如果这个答案是正确的,请在上面打勾。所以其他人也会使用它。【参考方案2】:

在上面的代码中,而不是

self.view.userInteractionEnabled = true;

使用这个

ImageView.userInteractionEnabled = YES;

【讨论】:

以上是关于如何在动画完成时在 imageview 中启用交互的主要内容,如果未能解决你的问题,请参考以下文章

IOS:在带有动画的 ImageView 下禁用滚动视图

如何在 pyqtgraph ImageView 中启用抗锯齿功能?

加载窗口时在路径上设置 SVG 动画

如何在使用 Chaquopy 时在 android 中显示加载动画

Android:如何停止在 ImageView 上应用的无限动画?

如何防止 Android 裁剪我的 ImageView?