でビューの回転を手動で変更しようとしていますUIDynamics
が、更新後にビューの回転が常にリセットされます。ドキュメントによると、そのメソッドはアイテムUIDynamicAnimator
のupdateItemUsingCurrentState:
位置と回転を更新する必要がありますが、位置のみが更新されます。
正方形のビューが画面から落ち、タッチ後にタッチの位置に配置され、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
(ここにすべてのコードを残して、新しく作成したプロジェクトにコピーして貼り付けることができるようにします。邪魔になるような無関係なコードが多すぎないことを願っています)
それで、私は何か間違ったことをしていますか?または、ビューの回転を明示的に変更することはできませんか?