gpt4 book ai didi

ipad - CAlayer 在子层上的变换随着手势闪烁(ipad)

转载 作者:行者123 更新时间:2023-12-02 01:18:56 26 4
gpt4 key购买 nike

我有一个 CALayer,其中包含一些其他子层(实际上是 CATextLayer)

当用户在 ipad 上做通常的手势时,我想在该层上应用一些转换,但它似乎无法正常工作。使用 CALayer 的目的是仅将转换应用于该层,以便我的所有子文本层将同时受到相同转换的影响。

发生的事情是,转换似乎在先前位置和当前位置之间闪烁。我真的不明白可能是什么问题......例如,当我做一个 2 根手指的平移手势时,CaTextLayer 的位置在我的手势期间一直闪烁,最后它们都正确地放置在新的翻译位置。

所以一切似乎都正常,除了闪烁的东西让我很困扰。

我是否需要设置一些我不知道的属性?我认为它也可能与边界和框架有关....

下面是我创建 CATextLayer 的方法(这只在创建时完成一次并且工作正常):

_textString = [[NSString alloc] initWithString: text];   
_position = position;

attributedTextLayer_ = [[CATextLayer alloc] init];
attributedTextLayer_.bounds = frameSize;

//.. Set the font

attributedTextLayer_.string = attrString;
attributedTextLayer_.wrapped = YES;

CFRange fitRange;
CGRect textDisplayRect = CGRectInset(attributedTextLayer_.bounds, 10.f, 10.f);
CGSize recommendedSize = [self suggestSizeAndFitRange:&fitRange
forAttributedString:attrString
usingSize:textDisplayRect.size];

[attributedTextLayer_ setValue:[NSValue valueWithCGSize:recommendedSize] forKeyPath:@"bounds.size"];
attributedTextLayer_.position = _position;

这就是我将它们添加到我的 Super CALayer 的方式

[_layerMgr addSublayer:t.attributedTextLayer_];

[[_drawDelegate UI_GetViewController].view.layer addSublayer:_layerMgr];

下面是我应用转换的方式:

_layerMgr.transform = CATransform3DMakeAffineTransform(_transform);

最佳答案

经过大量阅读和测试...我找到了自己的解决方案。

看起来CoreAnimation在你对任何层进行变换或操作时使用默认动画。强烈建议您在执行此类 CALayer 操作时进行他们所谓的“事务”。

我在 CoreAnimation Programming guide 中找到了所有相关信息,在以下部分:transactions .

然后我的解决方案是实现这样的事务,并在执行 CALayer 操作时阻止任何动画。

这是我在应用转换时所做的(防止闪烁):

-(void)applyTransform

{

if (! CGAffineTransformIsIdentity(_transform))

{

[CATransaction begin];

//This is what prevents all animation during the transaction
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];

_layerMgr.transform = CATransform3DMakeAffineTransform(_transform);

[CATransaction commit];
}

}

关于ipad - CAlayer 在子层上的变换随着手势闪烁(ipad),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601765/

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