gpt4 book ai didi

iOS:UIDynamicAnimator updateItemUsingCurrentState 不适用于旋转

转载 作者:行者123 更新时间:2023-12-01 17:39:29 25 4
gpt4 key购买 nike

我正在尝试手动更改 UIDynamics 中的 View 旋转,但 View 的旋转总是在更新后重置。 documentation说,UIDynamicAnimatorupdateItemUsingCurrentState:方法应该更新项目的位置和旋转,但只更新位置。
我创建了一个简短的示例,其中一个方形 View 从屏幕上落下,触摸后它应该定位到触摸的位置并旋转 45 度。但是,不会发生旋转(有时旋转可以在几分之一秒内看到,但之后会再次重置):

#import "ViewController.h"

@interface ViewController ()
{
UIDynamicAnimator* _animator;
UIView* _square;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

_square = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
_square.backgroundColor = [UIColor grayColor];
[self.view addSubview:_square];

_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[_square]];
gravityBehavior.magnitude = 0.1;
[_animator addBehavior:gravityBehavior];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
_square.center = [touch locationInView:self.view];
NSLog(@"transform before rotation: %@", NSStringFromCGAffineTransform(_square.transform));
_square.transform = CGAffineTransformMakeRotation(M_PI/4);
[_animator updateItemUsingCurrentState:_square];
NSLog(@"transform after rotation: %@", NSStringFromCGAffineTransform(_square.transform));
}
@end

(我把所有的代码都留在这里了,这样你就可以把它复制粘贴到一个新创建的项目中。希望没有太多不相关的代码让人不安)

那我做错了吗?或者是否可以显式更改 View 的旋转?

最佳答案

根据 Infinity James 的回答,我找到了一个效果很好的解决方案。
因此,要更新项目的轮换,您需要
1.从动态动画师中移除所有影响项目的行为
2.更新元素的轮换
3. 将移除的行为返回给动画师(无需创建新行为)
备注 :您可以将所有行为添加到一个父行为作为子行为,因此您可以一次删除并返回所有行为(但这种态度会阻止动态动画师中的所有运动,因此您还应该考虑其他危害较小的方式)。

- (void)rotateItem:(UICollectionViewLayoutAttributes *)item toAngle:(CGFloat)angle
{
CGPoint center = item.center;
[self.dynamicAnimator removeBehavior:self.parentBehavior];
item.transform = CGAffineTransformMakeRotation(angle);
[self.dynamicAnimator addBehavior:self.parentBehavior];
}

这个解决方案是一种妥协,因为它会停止项目的移动,所以如果你发现更好的东西,请添加你的答案......

关于iOS:UIDynamicAnimator updateItemUsingCurrentState 不适用于旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643594/

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