gpt4 book ai didi

ios - iPad Air 上应用变换后的 View 移动(视网膜显示屏)

转载 作者:可可西里 更新时间:2023-11-01 06:14:55 24 4
gpt4 key购买 nike

如果我对 View 应用变换,那么 View 在 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;

我如何移动应用了变换的 View 并避免动画?

UPD我已经找到了通过计时器调用移动的解决方案,但是如果我用手指移动框架,我就会遇到动画问题。我用 [CATransaction begin] [CATransaction commit] 包裹它来设置 View 的中心:

[CATransaction begin];
[CATransaction setValue:@(YES) forKey:kCATransactionDisableActions];

_destinationIndicatorView.center = center;
self.frameView.center = center;

[CATransaction commit];

我找到了一个奇怪的解决方案,但我想知道为什么它是一个有效的解决方案?我在这个方法中添加了 setNeedsDisplay,它解决了我的问题。 (如果我使用 drawRect 方法在我的屏幕上添加任何 View ,并在其 View 上调用 setNeedsDisplay,它也解决了我的问题):

[CATransaction begin];
[CATransaction setValue:@(YES) forKey:kCATransactionDisableActions];

_destinationIndicatorView.center = center;
[self.frameView setNeedsDisplay];

self.frameView.center = center;

[CATransaction commit];

我已经更新了我的项目。

UPD2这种延迟只发生在配备视网膜显示屏的 iPad 上(例如 iPad Air)。我创建了小视频来说明问题:https://yadi.sk/i/rAneCEFmjjEej

最佳答案

我认为您可以将更改包装在这段代码中:

[CATransaction begin];
[CATransaction disableActions];

// Your changes to the UI elements...

[CATransaction commit];

关于ios - iPad Air 上应用变换后的 View 移动(视网膜显示屏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com