UIMotionEffectGroup偏移毛刺

时间:2014-02-25 14:51:16

标签: ios uiview frame

当我尝试更改附加了motionGroup的UIImageView的帧时,我正在努力找到一种方法来消除偏移故障。

这是添加动作效果的代码:

UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
xAxis.minimumRelativeValue = @(-25.0);
xAxis.maximumRelativeValue = @(25.0);

self.motionGroup = [[UIMotionEffectGroup alloc] init];
self.motionGroup.motionEffects = @[xAxis];

[self.backImageView addMotionEffect:self.motionGroup];

现在当我需要改变原点时:

[self.backImageView removeMotionEffect:self.motionGroup];
[UIView animateWithDuration:0.3 animations:^{
    CGRect frame = self.backImageView.frame;
    frame.origin.x = self.originalBackImageViewOffset.x + 40;
    self.backImageView.frame = frame;
} completion:^(BOOL finished) {
    self.originalBackImageViewOffset = self.backImageView.frame.origin;
    [self.backImageView addMotionEffect:self.motionGroup];
}];
这样,如果设备倾斜,会有一点小故障。它出现在removeMotionEffect之后:因为imageView转换到它的原始状态,然后帧才会改变。如果手机没有倾斜,你甚至看不到毛刺(在模拟器中)。

如果你不删除animationGroup,那么在动画过程中倾斜手机会有更大的故障。

有谁知道如何克服这个问题?

P.S。我没有足够的声誉来创建标签“UIMotionEffectGroup”或“UIMotionEffect”。

1 个答案:

答案 0 :(得分:0)

取代动画帧,应用变换,然后在动画完成时设置帧,而不删除动作效果:

[UIView animateWithDuration:0.3 animations:^{

    self.backImageView.transform = CGAffineTransformMakeTranslation(40, 0);
} completion:^(BOOL finished) {
    CGRect frame = self.backImageView.frame;
    frame.origin.x = self.originalBackImageViewOffset.x + 40;
    self.backImageView.frame = frame;
    self.originalBackImageViewOffset = self.backImageView.frame.origin;
}];