我有一个UIVIEW,放在屏幕中间.当用户按下一个按钮时,我希望它在屏幕顶部附近向上移动,缩小到大约五分之一的大小.

我试过:

UIView.animateWithDuration(0.7) { () -> Void in
            self.main.transform = CGAffineTransformMakeScale(0.2, 0.2)
            self.main.transform = CGAffineTransformMakeTranslation(0, -250)
        }

但出于某种原因,这只会扩大视野.我也试着把这个放在动画中:

self.main.frame = CGRectMake(self.view.frame.width/2 - 10, 50, 50, 50)

如何让这两个动画都工作?

推荐答案

Joe在上面的回答与他的GIF描述的完全一样,但它并没有真正回答您的问题,因为它转换了then个视图比例(而不是同时转换和zoom ).您的问题是,在动画块中设置视图的变换,然后立即用另一个变换覆盖该值.要同时实现平移和zoom ,您需要以下内容:

@IBAction func animateButton(_ sender: UIButton) {
    let originalTransform = self.main.transform
    let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2)
    let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0)
    UIView.animate(withDuration: 0.7, animations: {
        self.main.transform = scaledAndTranslatedTransform
    })
}

Swift相关问答推荐

如何为SwiftData中的Predicate each Investment类型编写具有where分句的扩展方法?

Swift UI在视图中排序不同的 struct

我可以为UIMenu设定一个固定的订单吗?

如何获取嵌套数组中项的路径以修改数组?

如何在SwiftUI的文本视图中显示NSMutableAttributedString?

如何在macOS中延迟退出应用程序的退出操作?

Swift通过设置变量B自动设置变量A的值

在扩展中创建通用排序函数

在 SwiftUI 中禁用 Select 器选项

在领域 SwiftUI 异常中使用 Apple 登录:无法识别的 Select 器发送到实例

SwiftUI:按钮的圆形边缘的边框尺寸加倍

关于变量的视图的 SwiftUI 生命周期

为什么 id 不能通过 struct 从 Objective-C 移植到 Swift?

这是 Int64 Swift Decoding 多余的吗?

P384 公钥获取IncorrectParameterSize

使用 Swiftui 水平修剪 Shape()

在 Xcode 中自动实现 Swift 协议方法

否定 #available 语句

Swift 中的 PageViewController 当前页面索引

协议扩展中的where self是什么