直到我在运行时单击屏幕,该功能才起作用

Posted

技术标签:

【中文标题】直到我在运行时单击屏幕,该功能才起作用【英文标题】:function does not work until I click on the screen during run time 【发布时间】:2013-02-12 05:51:27 【问题描述】:

我想在视图加载几秒钟后显示一个动画图像,然后隐藏它并查看其他 2 个图像,我使用了一个数组来为图像设置动画然后设置一个计时器来重复调用函数 onTimer,在这个函数内我检查图像是否动画一次,如果是,则停止计时器并查看其他 2 张图像

当我运行项目时它工作正常,只是在我点击屏幕之前不会出现 2 张图像!

她是代码:

- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view.
outline.animationImages = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"traffic.png"],
                           [UIImage imageNamed:@"red.png"],
                           [UIImage imageNamed:@"yellow.png"],
                           [UIImage imageNamed:@"green.png"], nil];

[outline setAnimationRepeatCount:1];
outline.animationDuration = 4;
[outline startAnimating];

 timer = [NSTimer scheduledTimerWithTimeInterval: 1.0/30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];




-(void) onTimer 

if (![outline isAnimating]  == TRUE) // if animation has been played once, do something
    NSLog(@"animation stopped, do something");
    rannan.image = [UIImage imageNamed:@"rannan.png"];
    outline.image = [UIImage imageNamed: @"outline.png"];
    [ timer invalidate];

    // do something


看起来由于某种原因 isAnimating 没有设置为 TRUE,直到我在项目运行时单击屏幕

希望我能找到答案:)

【问题讨论】:

【参考方案1】:

我只是想知道为什么您每 1/30 秒触发一次计时器。您将动画设置为 4 秒,这样您就可以在 4 秒后触发计时器。

一种检查视图是否不再动画的方法:

CALayer *presentationLayer = (CALayer*)outline.layer.presentationLayer;
if(![presentationLayer animationKeys])

    NSLog(@"animation stopped, do something");

【讨论】:

看来你上面写的代码有问题,它在第一行说:“property presentationLayer cannot be found in forward calss object CALayer”,在if语句中说:“Reciever type 'CALayer 例如消息是一个前向声明" 我每隔 1/30 秒进行一次计时器检查,以防动画因任何原因冻结或其他原因,在这种情况下,它不会在 4 秒后完成

以上是关于直到我在运行时单击屏幕,该功能才起作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery datepicker上的自定义动态验证直到第二个焦点才起作用

当我单击按钮进入下一个屏幕时,移动 Android 应用程序崩溃

单击文件名时 PyQt5 QFileDialog 关闭

InputBindings只在聚焦时才起作用

单击按钮时运行功能

为啥不显眼的验证直到 AJAX 发布之后才起作用?