Ios 翻转标签上的快速动画

Ios 翻转标签上的快速动画,ios,animation,Ios,Animation,我在Swift 2中有一个无法修复的问题 我有一个ui标签和一个ui视图,两者都是颠倒的。我在UIView中添加了一个扩展,以执行一个动画(先增长后收缩),该动画是在我单击按钮时执行的。但是,当执行动画时,UILabel在动画过程中向后翻转180°,而UIView则不会。。。你知道为什么会这样吗 代码如下: ui视图的扩展: func animateBounce(multiplier: CGFloat, duration: NSTimeInterval) { UIView.animate

我在Swift 2中有一个无法修复的问题

我有一个
ui标签
和一个
ui视图
,两者都是颠倒的。我在
UIView
中添加了一个扩展,以执行一个动画(先增长后收缩),该动画是在我单击按钮时执行的。但是,当执行动画时,
UILabel
在动画过程中向后翻转180°,而
UIView
则不会。。。你知道为什么会这样吗

代码如下:

ui视图的
扩展:

func animateBounce(multiplier: CGFloat, duration: NSTimeInterval)
{
    UIView.animateWithDuration(duration / 2, animations:
    {
        self.transform = CGAffineTransformMakeScale(multiplier, multiplier)
    }, completion:
    {
        finish in
        UIView.animateWithDuration(duration / 2)
        {
            self.transform = CGAffineTransformIdentity
        }
    })
}
如何翻转
ui视图
ui标签

label.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
我如何称呼动画:

let multiplier = 1.5 as CGFloat
let animationTime = 0.5 as NStimeInterval

label.animateBounce(1.5, duration: animationTime)
view.animateBounce(1.5, duration: animationTime)
回答:(归功于马特) 我覆盖了标签的transform属性,从而删除了之前的转换(旋转)。您应该使用CGAffineTransformConcat添加新的变换,而不删除以前的变换。

您是说

self.transform = CGAffineTransformMakeScale(multiplier, multiplier)

这些行指定了
self
将具有的整个变换。因此,它们将删除所有现有变换,包括最初将标签倒置的变换,并将其替换为指定的变换

如果那不是你想做的,不要那样做。例如,不要调用
CGAffineTransformMakeScale
,而是调用
CGAffineTransformScale
,这样可以从视图上的现有变换开始,并将一个比例变换连接到该变换。

您是说

self.transform = CGAffineTransformMakeScale(multiplier, multiplier)

这些行指定了
self
将具有的整个变换。因此,它们将删除所有现有变换,包括最初将标签倒置的变换,并将其替换为指定的变换


如果那不是你想做的,不要那样做。例如,不要调用
CGAffineTransformMakeScale
,而是调用
CGAffineTransformScale
,这样可以从视图上的现有变换开始,并将缩放变换连接到该变换。

在数据更改时翻转标签 斯威夫特4

我已将标签从上到下翻转,其中我的标签声明为

@IBOutlet var cartCountLbl:UILabel

使用此方法调用函数

self.perform(#选择器(self.flip),with:nil,afterDelay:0)
翻转方法声明为

    @objc func flip() {
        let transitionOptions: UIViewAnimationOptions = [.transitionFlipFromTop, .showHideTransitionViews] 
        UIView.transition(with: cartCountLbl, duration: 1.0, options: transitionOptions, animations: {
        })
    }

数据更改时翻转标签 斯威夫特4

我已将标签从上到下翻转,其中我的标签声明为

@IBOutlet var cartCountLbl:UILabel

使用此方法调用函数

self.perform(#选择器(self.flip),with:nil,afterDelay:0)
翻转方法声明为

    @objc func flip() {
        let transitionOptions: UIViewAnimationOptions = [.transitionFlipFromTop, .showHideTransitionViews] 
        UIView.transition(with: cartCountLbl, duration: 1.0, options: transitionOptions, animations: {
        })
    }

PS:有人知道为什么我帖子的第一行说“大家好”,不会出现吗?PS:有人知道为什么我帖子的第一行说“大家好”,不会出现吗?啊,好吧,我没想过!似乎是合法的,谢谢。那我该怎么办<代码>CGAffineTransformMakeScale(1,1)
?编辑:
CGAffineTransformMakeScale(1,1)
做同样的事情。你的代码很傻。不需要链接两个动画。只要做一个自动反转动画同时,我相信我已经回答了你的问题。你问:“你知道为什么会这样吗?”;我已经解释了原因。我尝试使用
.AutoReverse
选项或
cGraffineTransformMakeScale(1,1)
,但问题仍然存在。。。我不知道我该怎么做。。。您是否有其他可以强制视图返回其原始帧的内容?抱歉,我的回答不够完整。这一行也是错误的:
self.transform=CGAffineTransformMakeScale(乘数,乘数)
您正在设置变换,这也意味着删除已应用的倒置旋转变换。您要做的是应用一个变换,该变换是现有旋转和新添加比例的组合。你看到了吗?然后自动转换到裸旋转,你就完成了。谢谢!我理解了问题并解决了它。啊,好吧,我没有想到这一点!似乎是合法的,谢谢。那我该怎么办<代码>CGAffineTransformMakeScale(1,1)
?编辑:
CGAffineTransformMakeScale(1,1)
做同样的事情。你的代码很傻。不需要链接两个动画。只要做一个自动反转动画同时,我相信我已经回答了你的问题。你问:“你知道为什么会这样吗?”;我已经解释了原因。我尝试使用
.AutoReverse
选项或
cGraffineTransformMakeScale(1,1)
,但问题仍然存在。。。我不知道我该怎么做。。。您是否有其他可以强制视图返回其原始帧的内容?抱歉,我的回答不够完整。这一行也是错误的:
self.transform=CGAffineTransformMakeScale(乘数,乘数)
您正在设置变换,这也意味着删除已应用的倒置旋转变换。您要做的是应用一个变换,该变换是现有旋转和新添加比例的组合。你看到了吗?然后自动转换到裸旋转,你就完成了。谢谢!我理解了问题并解决了它。你能进一步解释你的答案吗?我已经改变了我的答案,你现在会理解的@sirpools你能进一步解释你的答案吗?我已经改变了我的答案,你现在会理解的@sirpools