我目前正在制作一个使用自定义View Controller容器的应用程序.屏幕上同时显示多个视图,当轻触其中一个视图控制器时,选定的视图控制器将设置为全屏动画.在执行此操作时,选定的视图控制器子视图也会进行zoom (框架、字体大小等)但是,UILabel的字体属性不可动画化,从而导致问题.我试过多种解决方案,但都很烂.
我try 过的解决方案是:
- 截取较大视图的屏幕快照并设置更改动画(类似于Flipboard的操作方式)
- 使用Transform属性设置动画
- 缩小UIScrollView并在全屏显示时放大.
- 将adjustsFontSizeToFitWidth设置为YES,并在动画之前设置fontSize
其中一个是到目前为止最好的解决方案,但我对它并不满意.
我正在寻找其他建议,如果有人有任何或UILabel替代品,可以使用[UIView Animate..]流畅地制作动画.
下面是一个很好的示例,它类似于我希望我的UILabel做的事情: http://www.cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html个
EDIT: This code works
// Load View
self.label = [[UILabel alloc] init];
self.label.text = @"TEXT";
self.label.font = [UIFont boldSystemFontOfSize:20.0];
self.label.backgroundColor = [UIColor clearColor];
[self.label sizeToFit];
[self.view addSubview:self.label];
// Animation
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, .25, .25);
[self.label sizeToFit];
[UIView animateWithDuration:1.0 animations:^{
self.label.transform = CGAffineTransformScale(self.label.transform, 4.0, 4.0);
self.label.center = self.view.center;
} completion:^(BOOL finished) {
self.label.font = [UIFont boldSystemFontOfSize:80.0];
self.label.transform = CGAffineTransformScale(self.label.transform, 1.0, 1.0);
[self.label sizeToFit];
}];