小编Sam*_*ari的帖子

iOS进入后台时获取视图快照的确切时刻?

通过按下退出按钮将我的iPhone应用程序设置为后台时出现问题,然后通过点击主屏幕上的启动图标重新启动:应用程序的视图确实返回到我想要的初始状态,但在此之前它闪烁屏幕上较早的错误视图状态.

背景

我的主视图基本上由一系列相互关联的UIAnimateWithDuration调用组成.每当发生任何中断时我想要的行为是将动画重置为其初始状态(除非动画已完成并且应用程序已进入静态最终阶段),并且每当应用程序返回活动和可见状态时从那里重新开始.

在研究了我学到的主题后,我需要两种类型的中断处理代码来提供良好的ux:"即时"和"平滑".我有方法resetAnimation立即将视图属性重置为初始状态,方法pauseAnimation快速动画到相同的状态,另一个标签在视图顶部显示"暂停"淡入.

双击退出按钮

原因是"双击退出按钮"用例,它实际上不会隐藏您的视图或将您置于后台状态,它只是向上滚动一点以显示底部的多任务菜单.因此,在这种情况下立即重置视图状态看起来非常难看.动画过渡并告诉用户您已暂停似乎是一个更好的主意.

通过在我的App Delegate中实现applicationWillResignActive委托方法并从那里调用pauseAnimation,这个案例很好用.我通过实现applicationDidBecomeActive委托方法处理从多任务菜单返回并从那里调用resumeAnimation方法,淡出"暂停"标签,如果它在那里,并从初始状态开始我的动画序列.

这一切都很好,任何地方都没有闪烁.

访问翻转

我的应用程序是基于Xcode"实用程序"模板构建的,因此它有一个翻转视图来显示信息/设置.我通过在主视图控制器中实现这两个委托方法来处理访问反面并返回主视图:

  • (空隙)viewDidDisappear:(BOOL)动画

  • (空隙)viewDidAppear:(BOOL)动画

我在viewDidDisappear方法中调用resetAnimation,在viewDidAppear中调用resumeAnimation.这一切都很好,主视图是从过渡到可见状态的初始状态 - 没有意外闪烁的错误动画状态.但:

按下退出按钮并从我的应用程序图标重新启动(有缺陷的部分!)

这就是麻烦开始的地方.当我按下退出按钮一次并且我的应用程序开始向后台过渡时,会发生两件事.首先,applicationWillResignActive也在这里调用,所以我的pauseAnimation方法也会启动.它不需要,因为转换不需要在这里平滑 - 视图只是静态,"缩小"以显示主屏幕 - 但你能做什么?好吧,如果我只是在系统获取视图快照的确切时刻之前调用resetAnimation,它也不会造成任何伤害.

无论如何,其次,App Delegate中的applicationDidEnterBackground被调用.我试图从那里调用resetAnimation,以便在应用程序返回时视图处于正确的状态,但这似乎不起作用.似乎已经拍摄了"快照",因此,当我点击我的应用启动图标并重新启动时,错误的视图状态会在正确的初始状态显示之前在屏幕上短暂闪烁.在那之后,它运行良好,动画就像他们应该的那样,但是那个重新开始时刻的丑陋闪烁不会消失,无论我尝试什么.

从根本上说,我所追求的是,​​系统拍摄快照的确切时刻是什么?因此,准备我的视图以获取"纪念照片"的正确委托方法或通知处理程序是什么?

PS.然后是default.png,它似乎不会仅在首次启动时显示,而且每当处理器遇到困难或返回应用程序时由于其他原因而被短暂延迟.这有点难看,特别是如果你回到你看起来与你的默认视图完全不同的侧视图.但这是iOS的核心功能,我猜我甚至不应该试图找出或控制那个:)


编辑:由于人们要求提供实际代码,并且我的应用程序在询问此问题后已经发布,我会在这里发布一些.(该应用程序名为Sweetest Kid,如果你想看看它是如何工作的,它就在这里:http://itunes.apple.com/app/sweetest-kid/id476637106?mt = 8)

这是我的pauseAnimation方法 - resetAnimation几乎完全相同,除了它的动画调用没有持续时间和延迟,并且它没有显示'Paused'标签.我使用UIAnimation重置值而不是仅仅分配新值的一个原因是,由于某种原因,如果我不使用UIAnimation,动画就不会停止.无论如何,这是pauseAnimation方法:

    - (void)pauseAnimation {
    if (currentAnimationPhase < 6 || currentAnimationPhase == 255) { 
            // 6 means finished, 255 is a short initial animation only showing at first launch
        self.paused = YES;
        [UIView animateWithDuration:0.3
                              delay:0 
                            options:UIViewAnimationOptionAllowUserInteraction |
         UIViewAnimationOptionBeginFromCurrentState |
         UIViewAnimationOptionCurveEaseInOut |
         UIViewAnimationOptionOverrideInheritedCurve |
         UIViewAnimationOptionOverrideInheritedDuration
                         animations:^{ …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch delegates snapshot objective-c multitasking

21
推荐指数
1
解决办法
7914
查看次数

"fb://"网址方案 - 官方与否?

一些开发博客发布了有关用于在Facebook iPhone App中打开各种视图的"fb://"网址方案的信息.无论我搜索多少,我都没有从任何官方Facebook消息来源中找到一个关于此的话.

既然信息是公开的,我相信我不是唯一一个想知道的人,是否使用这个url方案是正式批准的,我是否允许使用它,它是否正常工作,如果不是已经批准了,它会是什么,大概的时间表是什么?

预先感谢您对此主题的任何信息!

facebook url-scheme ios4 ios facebook-apps

11
推荐指数
1
解决办法
7025
查看次数

应用zRotation以便相应地影响SKPhysicsBody的方法?

假设我有一个代表车轮的SKSpriteNode,圆形SKPhysicsBody成功连接到它上面.显然,该类型将横向滚动2d汽车驾驶游戏/模拟器.

我想要的是自己计算所有的电机内物理,而不必使用SpriteKit物理引擎.我想完全控制如何计算电机,离合器,变速箱等的机械装置,一直到驱动轮的转速.

从那时起,我很乐意控制SpriteKit物理引擎,然后计算当旋转驱动轮接触道路表面时会发生什么.无论情况如何,汽车前进,减速,加速和/或车轮打滑.

计算获得车轮转速的机制是没有问题的.我只是不确定如何从那里继续.

我可以通过在update:方法中应用zRotation来旋转方向盘,如下所示:

self.rearWheelInstance.zRotation += (self.theCar.wheelRPS/6.283 * timeSinceLastUpdate); // revolutions / 2pi = radians
Run Code Online (Sandbox Code Playgroud)

这样我就可以应用我之前计算过的精确RPM.明显的缺点是,SpriteKit的物理引擎完全没有注意到这种旋转.对于它所知道的一切,轮子从一个相位传送到下一个相位,因此它不会产生与路面的摩擦或与其他SpriteKit物理实体的任何其他交互.

另一方面,我可以在车轮上施加扭矩:

[self.rearWheelInstance.physicsBody applyTorque: someTorque];
Run Code Online (Sandbox Code Playgroud)

或角度冲动:

[self.rearWheelInstance.physicsBody applyAngularImpulse: someAngularImpulse];
Run Code Online (Sandbox Code Playgroud)

这确实以SpriteKit物理引擎理解的方式旋转轮子,从而使其与周围环境正确交互.

但除非我遗漏了一些明显的东西,否则它会将车轮视为一个独立于曲轴,传动装置或驱动轴转速的"自由滚动物体".但实际上,车轮没有"选择"在任何其他转速下滚动,而不是通过动力传动系统传递到轴上(除非变速器处于空档,离合器踏板踩下或离合器打滑,但这些都是另一个故事).

所以:1)我能以某种方式操纵zRotation,使SpriteKit物理引擎"理解"为旋转运动吗?

要么

2)我的逻辑中是否有明显的缺陷表明这不是我应该首先尝试的?如果是这样,你能不能指出我的缺陷,以便我可以采取更好的做法?

objective-c game-physics ios sprite-kit skphysicsbody

11
推荐指数
2
解决办法
388
查看次数

PHP:foreach循环中的循环次数

来自非专业编码人员的基本php问题.我有一段代码,其循环定义如下:

foreach ( $attachments as $id => $attachment ) {// do sth
Run Code Online (Sandbox Code Playgroud)

我需要定义产生的'循环回合'的数量,并且在进入循环之前我需要它,所以我不能只是命名一个计数器并在循环结束时查看它.

我知道必须有一些非常简单的代码行给我这些$附件的总数,但我只是不知道php足以知道这一行.有人可以帮我解决这个简单的问题吗?

php foreach

0
推荐指数
1
解决办法
127
查看次数