iphone – 如何在调整UIView大小时动画化

我在网上看到一些材料,但仍然不能完全达到我想要的地方。
我需要向下动画我的观点,使其高度更大。

这是我的代码到目前为止。这里发生的是,而不是我的意见调整大小,它只是改变它的位置一点。
如果我改变proprty而不是“bounds.size”为“transform.scale.y”,那会更好一点,只是这次扩展了上下的视图,而不仅仅是向下扩展。

另外我不是:这些键只是CALayer属性?在哪里可以找到这些键的列表?

我真的很感谢在这里的帮助。谢谢!

int x = self.btnHead.frame.origin.x;
int y = self.btnHead.frame.origin.y;
int height = self.btnHead.frame.size.height;
int width = self.btnHead.frame.size.width;


CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
[resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(width,height+50)]];
resizeAnimation.fillMode = kCAFillModeForwards;
resizeAnimation.removedOnCompletion = NO;

CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = [NSArray arrayWithObjects:resizeAnimation,nil];
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
animationGroup.removedOnCompletion=NO;
animationGroup.duration = 0.1;

[self.btnHead.layer addAnimation:animationGroup forKey:@"animations"];

编辑:按要求发布我的第一个代码 – 这将只是改变我的视图大小,但不会动画,无论我进入的时间。

    int x = self.btnHead.frame.origin.x;
    int y = self.btnHead.frame.origin.y;
    int height = self.btnHead.frame.size.height;
    int width = self.btnHead.frame.size.width;


    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:10];
    CGRect rect = CGRectMake(x,y,width ,height+BUTTON_HEIGH*2);

    self.btnHead.frame = rect;

    [UIView commitAnimations];
对frame属性进行动画可能是有问题的,但是只要转换是标识(也就是说,你没有改变它),它就可以正常工作。我刚刚测试了以下代码,它的工作原理如下:

[UIView animateWithDuration:.1f animations:^{
  CGRect theFrame = myView.frame;
  theFrame.size.height += 50.f;
  myView.frame = theFrame;
}];

再次,如果您随时更改了转换属性,这将无法正常运行。对于这个动画的更具防弹性的版本,您需要像您试图使用Core Animation一样动画界限属性。但是,您仍然不需要放入Core Animation。

这里要理解的重要事情是边界与中心属性之间的关系。所有仿射变换(平移,缩放或旋转)都需要一个参考点来执行变换。在作为中心点的UIView的情况下。 CALayer可以通过anchorPoint属性移动参考点,但在这种情况下我们不需要担心。

视图在两个方向上缩放的原因是缩放操作发生在中心周围。最简单的事情是将中心y移动一半的高度三角洲。喜欢这个:

myView.contentMode = UIViewContentModeRedraw;
[UIView animateWithDuration:.4f animations:^{
  CGRect theBounds = myView.bounds;
  CGPoint theCenter = myView.center;
  theBounds.size.height += 50.f;
  theCenter.y += 25.f;
  myView.bounds = theBounds;
  myView.center = theCenter;
}];

最后的考虑是强制视图在边界改变时重新绘制。出于性能原因,当您更改边界时,视图不会重画。但是,当您更改frame属性(frame属性的另一个奇怪)时,它会重画。要强制更改边界,您需要像之前的代码段的第一行那样设置contentMode。您可能希望在动画完成后将其设置回来,但这取决于您。这也是您的核心动画版本只更改位置而不是大小的原因。在运行动画之前,您需要将代码放在某处:

self.btnHead.layer.needsDisplayOnBoundsChange = YES;

我希望这一切都有道理。起初,框架,边界和中心属性可能有点混乱。

http://stackoverflow.com/questions/4586297/how-to-animate-while-resizing-uiview

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – 如何在调整UIView大小时动画化