我正在学习为 iOS 开发,作为教育过程的一部分,我创建了自定义 UIView
,它使用 drawRect
来绘制它的内容(Core Graphics + UIBezierPath
基于)。一切都按预期工作, View 是动态的,并根据它的宽度/高度呈现它的内容。现在我想添加溶解动画,它应该看起来像从 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];
但是,此代码不会将我的 View 从 100% 缩放到 0%。它只会让卡片消失(最多)。我尝试了很多缩放方法,但到目前为止我只达到了从 0% 缩放到 100% 的效果。这是我的观点完美的,但不是反向缩放......此外,即使我尝试应用非动画转换,它也不会放大/缩小,例如:
cardView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);
我看到我的 View 外观发生了一点变化,但没有缩放到 50%,这是肯定的。当我尝试将完全相同的动画逻辑应用于 UILabel 时,它完美地工作了!我在开发自定义 UIView 时错过了什么?为什么缩放 View 可能会出现故障? 非常感谢!
UPDATE #1 此代码使我的 View 正好放大两倍,然后将其缩放回原始大小:
[UIView animateWithDuration:5 delay:0
options: UIViewAnimationOptionBeginFromCurrentState
animations: ^{
for (CardView *cardView in self.cardsViews) {
cardView.transform = CGAffineTransformMakeScale(0.5, 0.5);
}
} completion:nil];
最佳答案
使用 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");
}];
关于ios - 使用 CGAffineTransformScale 自定义 UIView 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121203/