【发布时间】:2014-10-13 15:27:17
【问题描述】:
如果我对视图应用转换,则 iPad Air 上的视图移动会出现延迟。它看起来像 CALayer 中的隐式动画。 我创建了测试project。它应该在 iPad 模拟器上执行。 这是我用于应用转换的代码:
CGAffineTransform transform = CGAffineTransformIdentity;
if (_transformSwitch.on)
{
transform = CGAffineTransformRotate(CGAffineTransformMakeScale(2.0, 2.0), M_PI / 3.0);
}
self.frameView.transform = transform;
这是我用于应用移动的代码:
CGPoint transition = [_panRecognizer translationInView:self.view];
CGPoint newCenter = CGPointMake(_startCenter.x + transition.x, _startCenter.y + transition.y);
self.frameView.center = newCenter;
如何通过应用变换移动视图并避免动画?
UPD 我找到了一个按计时器调用移动的解决方案,但是如果我用手指移动帧,我的动画就有问题。 我设置了视图的中心,并用 [CATransaction begin] [CATransaction commit] 包裹它:
[CATransaction begin];
[CATransaction setValue:@(YES) forKey:kCATransactionDisableActions];
_destinationIndicatorView.center = center;
self.frameView.center = center;
[CATransaction commit];
我找到了奇怪的解决方案,但我想知道为什么它是有效的解决方案? 我添加到这个方法 setNeedsDisplay,它解决了我的问题。 (如果我使用 drawRect 方法在我的屏幕上添加任何视图,并在它的视图上调用 setNeedsDisplay,它也解决了我的问题):
[CATransaction begin];
[CATransaction setValue:@(YES) forKey:kCATransactionDisableActions];
_destinationIndicatorView.center = center;
[self.frameView setNeedsDisplay];
self.frameView.center = center;
[CATransaction commit];
我已经更新了我的项目。
UPD2 这种滞后只发生在配备 Retina 显示屏的 iPad(例如 iPad Air)上。我制作了小视频来说明问题:https://yadi.sk/i/rAneCEFmjjEej
【问题讨论】:
-
似乎有什么问题?
-
您可以关闭滑块附近的开关并用手指移动带有传单的框架。如果您快速移动手指,则框架将在您的手指后面。
-
快速移动手指时画面中心位置的问题。为了获得更多效果,您可以更改 line transform = CGAffineTransformRotate(CGAffineTransformMakeScale(2.3, 2.3), M_PI / 3.0);转换 = CGAffineTransformRotate(CGAffineTransformMakeScale(10.0, 10.0), M_PI / 3.0);
-
我已经更新了项目。
标签: ios uiview cgaffinetransform ipad