使用 UIDynamicAnimator 后图像模糊

Posted

技术标签:

【中文标题】使用 UIDynamicAnimator 后图像模糊【英文标题】:Blurry image after using UIDynamicAnimator 【发布时间】:2014-06-02 20:30:55 【问题描述】:

我使用 UIDynamicsAnimator 效果很好,只是在动画完成后,被推送和反弹的图像是模糊的。请帮帮我。

@property (nonatomic,weak) IBOutlet UIImageView *someImage;

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

self.gravity = [[UIGravityBehavior alloc] initWithItems:@[self.someImage]];
CGVector gravityDirection = -1.0, 0.5;
[self.gravity setGravityDirection:gravityDirection];

self.collision = [[UICollisionBehavior alloc] initWithItems:@[self.someImage]];
self.collision.translatesReferenceBoundsIntoBoundary = YES;

self.itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[self.someImage]];
self.itemBehaviour.elasticity = 0.5;

[self.animator removeAllBehaviors]; // to avoid problems from the last behaviour animation

[self.collision addBoundaryWithIdentifier:@"barrier"
                               fromPoint:CGPointMake(444,0)
                               toPoint:CGPointMake(444,768)];

self.pushBehavior = [[UIPushBehavior alloc] initWithItems:@[self.someImage] mode:UIPushBehaviorModeInstantaneous];
self.pushBehavior.magnitude = 1.0f;
self.pushBehavior.angle = 0.0f;
[self.animator addBehavior:self.pushBehavior];

self.pushBehavior.pushDirection = CGVectorMake(1.0f, 0.0f)
self.pushBehavior.active = YES;

[self.animator addBehavior:self.itemBehaviour];
[self.animator addBehavior:self.collision];
[self.animator addBehavior:self.gravity];

【问题讨论】:

图片的实际尺寸(以像素为单位)是多少?最终位置的坐标是整数还是分数? 【参考方案1】:

我认为您的问题是动画完成时图像不在确切的点上。我建议您添加一个委托,并在动画暂停时将图像的 x 和 y 舍入到最接近的整数。

【讨论】:

我通过将图像大小调整为高度和宽度的偶数来解决了这个问题。也许问题在于 UIDynamics 需要框架原点和视图中心都是精确的点。

以上是关于使用 UIDynamicAnimator 后图像模糊的主要内容,如果未能解决你的问题,请参考以下文章

iOS:UIDynamicAnimator updateItemUsingCurrentState 不适用于旋转

使用自动布局时使用 UIDynamicAnimator 制作动画

将 CGAffineTransformScale 与 UIAttachmentBehavior (UIDynamicAnimator) 一起使用

为啥我的 UIDynamicAnimator 类继承不能使用 addChildBehavior

使用 UIDynamicAnimator 水平动画 UIView

第六课——UIDynamicAnimator