gpt4 book ai didi

ios - 如何在不跳过的情况下在特定 anchor 旋转图层?

转载 作者:技术小花猫 更新时间:2023-10-29 10:44:33 24 4
gpt4 key购买 nike

我想旋转左上角有图像的层,而不是中心。根据文档,我将 anchorPoint 属性设置为 [0, 1]。在我的示例中, View 旋转了 50°,但在它开始动画之前, View 跳转到屏幕上的另一个点。

self.shakeTag.layer.anchorPoint = CGPointMake(0.0f, 1.0f);
[UIView beginAnimations:@"rotate" context:nil];
[self.shakeTag.layer setTransform:
CATransform3DRotate(CATransform3DIdentity,
radians(50.0), 0.0f, 0.0f, 1.0f)];
[UIView commitAnimations];

radians() 定义如下:

static inline double radians (double degrees) {return degrees * M_PI/180;}

当我使用 4 倍大小且有很多透明像素的图像时,我可以在默认 anchor [0.5, 0.5] 旋转它,但我不想为不可见像素浪费空间.有什么想法可以防止图层在旋转发生之前跳跃吗?

最佳答案

更改 anchor 会影响 View 的定位。如果更改 anchor 并且希望将 View 保持在当前位置,则需要更改 View 的位置。使用类似这样的东西(取自此处:Layer Position jumps at start of (Core) Animation)来设置 anchor 并补偿位置变化:

-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y);
CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y);

newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);

CGPoint position = view.layer.position;

position.x -= oldPoint.x;
position.x += newPoint.x;

position.y -= oldPoint.y;
position.y += newPoint.y;

view.layer.position = position;
view.layer.anchorPoint = anchorPoint;
}

另请参阅此处了解更多详细信息:Changing my CALayer's anchorPoint moves the view

关于ios - 如何在不跳过的情况下在特定 anchor 旋转图层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645723/

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