ios - 快速/对快照执行多个操作

标签 ios swift

我有我的 View Controller 的快照,

...
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
...
snapshot = fromView.snapshotViewAfterScreenUpdates(true)
...
container!.addSubview(snapshot!)
...

我想移动并改变尺寸。

    let moveDown = CGAffineTransformMakeTranslation(200, container!.frame.height - 600)        
    let minimalize = CGAffineTransformMakeScale(0.6, 0.6)

但是同时调用:

            self.snapshot?.transform = moveDown
            self.snapshot?.transform = minimalize

仅执行其中一项转换。 如果 moveDown 最后执行,则向下移动,如果最小化 -> 最小化。

我怎样才能一个接一个地执行两个转换?

我确定我的问题是,快照没有更改,它始终是“源”快照,这就是为什么只有最后一个快照会采取行动。但是如何保存"new"快照的快照呢?

最佳答案

transform 属性不会永久修改原始数据,它只会在设置该属性时对其进行转换。因此,您一次只能使用一种变换。但是,您可以进行一次转换来完成许多事情。不要进行两种单独的变换,一种是移动的,另一种是缩放的,而是进行一种同时执行这两种变换的操作:

let moveDown = CGAffineTransformMakeTranslation(200, container!.frame.height - 600)
let moveDownAndScale = CGAffineTransformScale(moveDown, 0.6, 0.6)

self.snapshot?.transform = moveDownAndScale

技巧是使用 CGAffineTransformScale 而不是 CGAffineTransformMakeScale。后者创建一个全新的变换,而前者将比例应用于现有变换。

关于ios - 快速/对快照执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579872/

相关文章:

ios - 找不到类型 "UITableViewRowAction"的初始值设定项

ios - Xcode 4 不会更新模拟器上的 xib 接口(interface)

ios - 如何更改 iOS Swift 4 中加载的 NibView 的位置?

swift - Objective-C const 和 let Swift 在运行和编译时间方面的区别

ios - 将 UITableView 约束到其父 View 的边缘而没有 Storyboard

swift - 在 CALayer 上使用自定义 CIFilter 显示 CALayer 没有变化

swift - 对于使用 enumerated() 方法的情况

ios - 常见 iOS 应用程序的 URL 方案

iOS SDK : set background color of button by its tag number

ios - 访问 coredata `faults` 使 viewController 中的所有 coredata 属性都为 NIL