UIView反弹?

时间:2013-12-02 00:36:13

标签: ios objective-c cocoa-touch animation uiview

我的笔尖底部有一个UIView。我希望它的高度增长,但让它看起来好像没有移动到位,只是增长。然后将高度缩回到原始高度,除了高度外没有任何移动。不幸的是,它在y定位中反弹。它会正常生长,但会从屏幕底部移动。谁能告诉我为什么?

这是它应该是什么样子,将鼠标悬停在黑匣子上,(UIView应该做什么):

http://jsfiddle.net/hqJm9/

以下是我在目标c中使用的奇怪结果(弹跳)

点击按钮

[UIView animateWithDuration:0.5 animations: ^{
                CGRect blackBackgroundFrame = self.blackBackground.frame;
                blackBackgroundFrame.size.height += 50;
                self.blackBackground.frame = blackBackgroundFrame;

                self.blackBackground.center = CGPointMake(self.blackBackground.center.x, self.blackBackground.center.y - 50);

}];
再次按

按钮:

  [UIView animateWithDuration:0.5 animations: ^{
                CGRect blackBackgroundFrame = self.blackBackground.frame;
                blackBackgroundFrame.size.height -= 50;
                [self.blackBackground setFrame:blackBackgroundFrame];
                self.blackBackground.center = CGPointMake(self.blackBackground.center.x, self.blackBackground.center.y + 50);
    }];

为什么它从底部移动?我怎样才能解决这个问题??感谢

1 个答案:

答案 0 :(得分:1)

视图可能会弹跳,因为您正在尝试同时为中心和帧设置动画。相反,试试这个:

[UIView animateWithDuration:0.5 animations: ^{
            CGRect originalFrame = self.blackBackground.frame;
            self.blackBackground.frame = CGRectMake(originalFrame.origin.x,
                                                    originalFrame.origin.y-50,
                                                    originalFrame.size.width,
                                                    originalFrame.size.height+50);
}];

[UIView animateWithDuration:0.5 animations: ^{
            CGRect originalFrame = self.blackBackground.frame;
            self.blackBackground.frame = CGRectMake(originalFrame.origin.x,
                                                    originalFrame.origin.y+50,
                                                    originalFrame.size.width,
                                                    originalFrame.size.height-50);
}];

视图应该正常动画。

编辑:经过仔细检查和一些实验后,看起来问题实际上是你正在将中心改变50像素。你在这里做的事情应该很好,如果你记得中心是中间点,所以高度增加50只会使中心改变25。