Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在连续动画中查看散漫动画?_Iphone_Objective C_Animation - Fatal编程技术网

Iphone 在连续动画中查看散漫动画?

Iphone 在连续动画中查看散漫动画?,iphone,objective-c,animation,Iphone,Objective C,Animation,我正在尝试编写一个小应用程序,在主屏幕上,我制作了一个飞行的“泡泡”动画。这个动画必须是连续的。(我重复使用从屏幕上飞出的气泡)我听说动画必须在主线程上运行,就像更改UI的每个操作一样。这是真的吗?当我尝试在这个屏幕上显示UIAlertView时,由于连续的气泡动画,它的动画变得非常散漫。(这是一个带有指示器的自定义alertview)该设备是iPhone4,因此我认为显示普通的UIAlertView不应该是一个问题 我想问一下,我是否对气泡动画使用了正确的方法。因此,首先,我使用一个NSTim

我正在尝试编写一个小应用程序,在主屏幕上,我制作了一个飞行的“泡泡”动画。这个动画必须是连续的。(我重复使用从屏幕上飞出的气泡)我听说动画必须在主线程上运行,就像更改UI的每个操作一样。这是真的吗?当我尝试在这个屏幕上显示UIAlertView时,由于连续的气泡动画,它的动画变得非常散漫。(这是一个带有指示器的自定义alertview)该设备是iPhone4,因此我认为显示普通的UIAlertView不应该是一个问题

我想问一下,我是否对气泡动画使用了正确的方法。因此,首先,我使用一个NSTimer,它每0.01秒调用一次
startAnimation
方法(我在控制器的
viewdide:
方法中启动它)。在
startAnimation
方法中,首先我使用随机x和y坐标生成气泡(以便在视图显示后在屏幕上看到气泡),然后在底部使用随机x和y=460坐标生成气泡。在startAnimation方法中,我运行一个计数器(称为frames),当这个计数器的值等于35时,我再次调用bubble generate方法

问题:

我将生成的气泡存储在一个数组中,将“消失”的气泡(不在屏幕上)存储在另一个数组中。首先,我尝试重用gonebubbles数组中的气泡,然后如果数组用完,我会生成新的气泡。处理此操作时,连续动画停止,然后继续。休息时间约为一秒钟,但这非常令人不安。 有人能帮忙解决这个问题吗?谢谢你的建议,麦迪克

- (void)viewDidAppear {

    .

    timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(startAnimation) userInfo:nil repeats:YES];
    .
}


- (void)startAnimation {

    self.current = [NSDate timeIntervalSinceReferenceDate];
    double diff = (self.start - self.current);

    if ( diff < 0 ) {
        diff = (-1) * diff;
    }

    self.start = self.current;
    frames++;

    if ( shouldMoveBubbles ) {
        [mug moveBubbles:diff];
    }

    if ( frames == 35 ) {
        DebugLog(@"################################################################");
        DebugLog(@"#######################  FRAME = 35  ###########################");
        DebugLog(@"################################################################");
        [mug createNewBubbleOnTheBottomOfView:self.view];
        frames = 0;
    }
}
在泡泡课上:

- (void)moveBubbleX:(float)deltaX Y:(float)deltaY {
    self.bubbleImage.center = CGPointMake(self.bubbleImage.center.x + deltaX, self.bubbleImage.center.y + deltaY);
}

这听起来像是内存问题。缓慢的视图动画就是一个明显的迹象。听起来像是你产生泡沫的方式导致了这个问题。你提到了保持两个气泡阵列的方法。您永远不会说是否限制了两个数组中同时出现的气泡数。你也没有提到清理这些气泡的时间。这听起来像一个记忆“黑洞”。我建议设置一次可以在屏幕上显示的最大气泡数

此外,您还提到了自定义警报视图。如果要修改UIAlertView,您将遇到问题,因为官方不支持它。此外,我还看到UIAlertView动画在内存紧张时变慢。如果你用泡泡解决了内存问题,你可能也会解决这个问题

最后,给你一点建议。用UIKit制作动画游戏可能不是个好主意。N计时器并不像许多人想的那样准确。UIImage的加载成本相对较高。人们知道,触摸移动的按钮在最坏的情况下是不可靠的,在最好的情况下是黑客行为。我建议研究一个游戏框架,比如


祝你好运

在这种情况下,你所说的“话语”是什么意思?试着想象一个带有活动指示器的alertview。当我试图显示它(记住,气泡动画)时,它显示得非常慢,活动指示器的动画卡住、卡住,当我关闭alertview时,它消失得非常慢。所以整个过程非常缓慢。对,听起来像是内存问题。我建议使用
构建和分析
来解决这个问题。
- (void)moveBubbleX:(float)deltaX Y:(float)deltaY {
    self.bubbleImage.center = CGPointMake(self.bubbleImage.center.x + deltaX, self.bubbleImage.center.y + deltaY);
}