小编Chr*_*ris的帖子

如何重置/重新启动动画并让它看起来连续?

所以,我对iOS编程很新,并继承了一位前同事的项目.我们正在构建一个包含规范UI的应用程序.当数据进入时,我们希望将"层"(即针图像)从当前角度平滑地旋转到新的目标角度.这是我们所拥有的,它与慢速数据配合良好:

-(void) MoveNeedleToAngle:(float) target
{
   static float old_Value = 0.0;
   CABasicAnimation *rotateCurrentPressureTick = [CABasicAnimation animationWithKeyPath:@"transform.rotation");
   [rotateCurrentPressureTick setDelegate:self];
   rotateCurrentPressureTick.fromValue = [NSSNumber numberWithFloat:old_value/57.2958];
   rotateCurrentPressureTick.removedOnCompletion=NO;
   rotateCurrentPressureTick.fillMode=kCAFillModeForwards;
   rotateCurrentPressureTick.toValue=[NSSNumber numberWithFloat:target/57.2958];
   rotateCurrentPressureTick.duration=3; // constant 3 second sweep

   [imageView_Needle.layer addAnimation:rotateCurrentPressureTick forKey:@"rotateTick"];
   old_Value = target;
}
Run Code Online (Sandbox Code Playgroud)

问题是我们有一个新的数据方案,在动画完成之前,新数据可以更快地进入(并且上面的方法被调用).发生了什么我认为动画是从旧目标重新启动到新目标,这使它非常跳跃.

所以我想知道如何修改上面的函数来添加连续/可重启的行为,如下所示:

  1. 检查当前动画是否正在进行中
  2. 如果是这样,请确定当前动画角度的位置,然后
  3. 取消当前并从当前旋转开始新动画到新目标旋转

是否有可能将该行为构建到上述函数中?

谢谢.对不起,如果问题似乎不明,我已经研究并理解了上述对象/方法,但我不是专家.

animation mobile-application ios

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

是否可以同时调试 UI App 和 AAR?

我们正在开发一个 android 项目,并希望开发两个可以协同工作的二进制文件:一个 UI 应用程序和一个 AAR 库后端。这个想法是 AAR 可能在未来与其他 UI 一起使用。

因此,我们有一名开发人员在从事 AAR 项目,另一名开发人员在从事 UI 项目。有没有办法同时调试两者;即,运行 UI+AAR 并在两者之间来回跟踪执行,在任一侧设置断点和监视等?

我在 .NET 中做了类似的事情,在一个“解决方案”中开发一个带有多个“项目”的 UI EXE+DLL 后端,一次调试整个事情;这是一种非常好的开发方式。有什么办法可以用 android studio 实现这一点吗?

谢谢。

debugging android aar

6
推荐指数
1
解决办法
3020
查看次数

从Xcode更快地“发布”构建?

我对Xcode比较陌生。我们正在测试一个显示传入数据的应用,它需要尽可能快。在其他平台上,我需要从“调试”更改为“发布”,以便启动优化并删除调试代码,这可能对速度产生深远影响。要在快速/发布模式下进行构建,我需要在Xcode中做哪些等效的事情?

(我正在使用谷歌搜索功能,看到很多热门歌曲似乎都在附近,但是我可能会被术语抛弃,我可能需要将其略微降低:))

谢谢您的帮助。

xcode ios

5
推荐指数
2
解决办法
5525
查看次数

如何在CBPeripheralManager处于活动状态时提高CBCentralManager的性能

我们创建了一个iOS应用程序,它实现了一个CBCentralManager来连接我们创建的设备,以10Hz的频率传输数据.这些数据通过并快速显示非常重要,因此我们围绕此建立了严格的延迟检查,如果错过了太多的点,或者如果本地时钟检测到传入值减慢,我们将会出错并断开连接.

客户端已经要求我们顶级实现第二个iOS应用程序,它将观察第一个.我们在原始应用程序中实现了一个CBPeripheralManager,它可以广告,可以连接,并定期将其数据发布到一些传出特性.

我们发现我们似乎无法将观察者iOS应用程序连接到原始iOS应用程序(即,原始iOS应用程序同时具有与设备的CBCentral连接和同时活动的观察者应用程序的CBPeripheral连接),绊倒我们对来自设备的传入数据的延迟检查.

我已经尝试了我能想到的一切,我为CBPeripheralManager和CBCentralManager使用了单独的队列,如下所示:

    q = dispatch_get_global_queue(QOS_CLASS_UTILITY, 0);
    ptr_CBPeriphMgr = [[CBPeripheralManager alloc] initWithDelegate:self queue:q];
Run Code Online (Sandbox Code Playgroud)

也,

  • 我记录并记录了所有内容,验证我的代码没有花太长时间
  • 我将几乎所有的代码都移出了BLE处理程序,使它们非常轻巧而不会阻塞,
  • 我尝试了低优先级的单独队列(上面显示的例子)
  • 我已经尝试将我的CBPeripheralManager数据速率降低到涓流,一秒钟更新几次
  • 我已经尝试在建立CBPeripheralManager连接后暂停延迟检查三秒钟(这非常不理想),但问题似乎是随机发生的,而不仅仅是在连接之后.

似乎无论我尝试什么,在外围设备和中央连接都处于活动状态4-5分钟后(我们有一个循环,其中第二个应用程序每隔五秒重复连接并断开连接,以挑战设备连接)我的传入值更新自中央设备减速到大约1/4或1/5速度,或者它们停止一整秒,然后几乎同时进行三到四次更新 - 这两次更新都会延迟我们的延迟检查.这就像是一些队列被填满并且表现平坦,但正如我上面提到的,我认为我正在使用单独的队列.

我在我的智慧结束...有没有人想过如何在iOS应用程序中优先考虑我的中心功能而不是我的外围功能,或以某种方式提高性能以防止这成为一个问题并保持我的应用程序响应10Hz来自设备的更新,即使被视为外围设备?

(编辑说我们正在重复连接/断开第二个应用程序...也许我在正确断开连接后没有清理,垃圾堆积并搞砸了BLE?这可以解释为什么问题似乎发生在4之后无论第二次连接的数据更新频率如何,均为-5分钟.)

ios bluetooth-lowenergy cbperipheral cbcentralmanager cbperipheralmanager

5
推荐指数
1
解决办法
345
查看次数

我的第一个Android应用程序在旋转时崩溃了

每当我将Nexus从纵向旋转到横向或从横向旋转到纵向时,我的应用程序都会崩溃.它产生下面的异常报告,我不明白.

我基本上做了它所说的,发现我的主要活动onDestroy功能并添加了super.onDestroy,这使问题消失了.

但是,为什么会这样呢?为什么onDestroy只是因为我旋转了平板电脑才开始发挥作用?

02-18 00:43:28.504  28259-28259/com.mpr.myfirstapp E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.mpr.myfirstapp, PID: 28259
android.util.SuperNotCalledException: Activity {com.mpr.myfirstapp/com.mpr.myfirstapp.MainActivity} did not call through to super.onDestroy()
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3660)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3689)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3889)
at android.app.ActivityThread.access$900(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5223)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Run Code Online (Sandbox Code Playgroud)

android

2
推荐指数
2
解决办法
1万
查看次数

为什么这些idneitcal QB计算会产生略微不同的值?

因此,我正在尝试将一些非常古老且值得尊敬的工程分析QBasic 4.5代码移植到C.我试图准确地匹配结果,并且我发现我无法理解QB如何进行数学运算.

例如,这两行

DIM a AS SINGLE
DIM d2 AS SINGLE
DIM e2 AS SINGLE

a = 32.174
d2 = 1! / (2! * 32.174 * 144!)
e2 = 1! / (2! * a! * 144!)
Run Code Online (Sandbox Code Playgroud)

d2变为1.07920125E-4(浮点0x38e2532d)

e2变为1.0792013E-4(浮点0x38e2532e)

这有点不同.谁能帮我理解为什么?非常感谢.

basic qbasic quickbasic

2
推荐指数
1
解决办法
65
查看次数

尝试(和失败)写入STM32上的const是否安全?

所以,我们正在尝试一种方法来执行一些矩阵数学.这是嵌入式的,因此内存是有限的,我们将有大型矩阵,因此它可以帮助我们将其中的一些存储在闪存而不是RAM中.

我写了一个矩阵结构,两个数组(一个const/flash和另一个RAM),以及一个"修改"和"获取"功能.一个矩阵,我初始化为RAM数据,另一个矩阵我初始化为闪存数据,使用从const*f32到*f32的转换.

我发现当我在STM32嵌入式处理器上运行此代码时,RAM矩阵是可修改的,指向闪存数据的矩阵根本不会改变(设置为12.0不"取",值仍然2.0).

(在改变之前)a = 2,b = 2,(改变之后)c = 2,d = 12

这是可接受的行为,通过设计我们不会尝试修改闪存数据的矩阵,但如果我们犯了错误,我们不希望它崩溃.

但是,如果我使用Visual C++在我的Windows机器上运行相同的代码,当我尝试运行下面的代码时,当我尝试将const数组修改为12.0时,我得到"访问冲突".

Windows会反对这并不奇怪,但我想更好地理解行为上的差异.这似乎与CPU架构有关.在我们的STM32上,让代码尝试写入const数组并让它无效吗?或者是否有副作用或避免这种情况的理由?

static const f32 constarray[9] = {1,2,3,1,2,3,1,2,3};
static f32 ramarray[9] = {1,2,3,1,2,3,1,2,3};

typedef struct {
     u16 rows;
     u16 cols;
     f32 * mat;
} matrix_versatile;

void modify_versatile_matrix(matrix_versatile * m, uint16_t r, uint16_t c, double new_value)
{
    m->mat[r * m->cols + c] = new_value;    
}

double get_versatile_matrix_value(matrix_versatile * m, uint16_t r, uint16_t c)
{
    return m->mat[r * m->cols + c];
}

double a;
double b;
double c; …
Run Code Online (Sandbox Code Playgroud)

embedded stm32 visual-c++

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