我正在学习为iOS开发,作为教育过程的一部分,我创建了自定义UIView
,使用drawRect
绘制内容(基于Core Graphics + UIBezierPath
)。 Everthing按预期工作,视图是动态的,并根据它的宽度/高度呈现它的内容。现在我想添加溶解动画,它看起来应该从100%缩放到0%。我写了这段代码来做到这一点:
[UIView animateWithDuration:1 delay:0
options: UIViewAnimationOptionBeginFromCurrentState
animations: ^{
for (CardView *cardView in self.cardsViews) {
cardView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.01, 0.01);
}} completion:nil];
但是,此代码不会将我的视图从100%缩放到0%。它只是使卡片消失(最多)。我已经尝试了很多方法来进行缩放,但到目前为止我所达到的效果只是从0%缩放到100%。这个我的观点完美,但没有反向缩放......而且,即使我尝试应用非动画变换,它也不会向上/向下缩放,例如:
cardView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);
我看到我的视图看起来会改变A BIT,但不会扩展到50%,这是肯定的。当我尝试将完全相同的动画逻辑应用于UILabel时,它完美运行!我错过了开发自定义UIView的哪些方面?缩放视图为何可能出现故障 非常感谢提前!
更新#1 此代码使我的视图的大小只是原来大小的两倍,而不是将其缩放回原始大小:
[UIView animateWithDuration:5 delay:0
options: UIViewAnimationOptionBeginFromCurrentState
animations: ^{
for (CardView *cardView in self.cardsViews) {
cardView.transform = CGAffineTransformMakeScale(0.5, 0.5);
}
} completion:nil];
答案 0 :(得分:6)
使用CGAffineTransformScale:
是100%到0%cardView.view.transform =CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
[UIView animateWithDuration:0.3/1.5 animations:^{
cardView.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
} completion:^(BOOL finished)
{
NSLog(@" Animation complet Block");
}];
答案 1 :(得分:1)
您可以尝试将视图的contentMode
设置为UIViewContentModeRedraw
,并在UIViewAnimationOptionAllowAnimatedContent
方法中添加另一个动画选项 - animateWithDuration
。
答案 2 :(得分:1)
从120%迅速缩放到100%:
logoView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
UIView.animate(withDuration: 0.55, delay: 0.1, options: [.curveEaseOut], animations: {
self.logoView.transform = .identity
self.view.layoutIfNeeded()
}, completion: { _ in
})