我正在与iOS 8性能问题作斗争。更新到iOS 8确实使我的应用程序在iPad 2上几乎无法使用。有一些基本的性能问题,我试图解决,看看我是否可以避免它们或至少减轻它们对我的应用程序的影响。一个问题是拖动UIImageViews。关于如何使用UIImageViews调用TouchesMoved函数有一些非常不同的东西。
Please see my video below for a full description,但这是我目前的调查结果。我在UIImageViews中使用TouchesMoved函数在用户将手指拖过屏幕时在屏幕上拖动对象。
public override void TouchesMoved (NSSet touches, UIEvent evt)
{
base.TouchesMoved (touches, evt);
UITouch touch = touches.AnyObject as UITouch;
PointF TouchLocation_old = TouchLocation;
TouchLocation = touch.LocationInView (this.Superview);
// Console.WriteLine("TouchLocation = " + TouchLocation);
float offsetX = TouchLocation.X - TouchLocation_old.X;
float offsetY = TouchLocation.Y - TouchLocation_old.Y;
Center = new PointF(Center.X + offsetX, Center.Y + offsetY);
}
在我的项目中,只要我修改拖动对象的位置,就会对TouchesMoved事件产生某种延迟或限制。通常情况下,TouchesMoved事件每隔几毫秒就会发生一次,但在iOS 8中,在某些情况下,它每隔120毫秒就会消失,导致在屏幕上拖动对象时出现滞后峰值。为什么是这样?那么iOS 8和TouchesMoved功能已经改变了
另外注意,我注意到添加到视图控制器的大量UIViews会导致这种情况。出于某些原因,在iOS 7中,向视图控制器添加大量UIViews并没有影响它,但在iOS 8中它导致TouchesMoved函数的调用次数减少(可能因为它的迭代次数)通过所有的观点确定它是否触及它们?但是iOS 7会做得那么对吗?iOS 8中的某些东西会让这个过程更耗时吗?)我还注意到UIScrollViews变成了&# 34;较重"和#34;慢"在iOS 8中也更快,在iOS 7中,它们使用相同数量的子视图顺利运行。
----添加了硬件信息----
iOS 7.1上的iPad 2 MC969LL / A
iOS 8.0上的iPad Mini MD528LL / A
----添加了调查结果----
在iOS 8中,View Controller视图中的大量UIViews也落后于CAKeyframeAnimation的性能。虽然这个测试用例并不像我的应用程序那样极端,但我已经在下面的一个单独的测试用例中证明了这个TouchesMoved问题。