作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试手动更改 UIDynamics
中的 View 旋转,但 View 的旋转总是在更新后重置。 documentation说,UIDynamicAnimator
的updateItemUsingCurrentState:
方法应该更新项目的位置和旋转,但只更新位置。
我创建了一个简短的示例,其中一个方形 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
最佳答案
根据 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/
我正在尝试手动更改 UIDynamics 中的 View 旋转,但 View 的旋转总是在更新后重置。 documentation说,UIDynamicAnimator的updateItemUsing
我是一名优秀的程序员,十分优秀!