正如在另一个答案中所讨论的,逆向工程UIActivityViewController
是唯一的选择,以便能够实现类似的效果。我试过这个使用iPhone 6s - 10.3模拟器。对于iOS 9.x或11.x或以上版本,以下发现可能不准确。
A.找出所有内部变量为UIActivityViewController
var variablesCount: UInt32 = 0
let variables = class_copyIvarList(UIActivityViewController.self, &variablesCount)
for i in 0..<variablesCount {
if let variable = variables?[Int(i)] {
let name = String(cString: ivar_getName(variable))
let typeEncoding = String(cString: ivar_getTypeEncoding(variable))
print("\(name)\n\(typeEncoding)\n\n")
}
}
free(variables)
的那些那些了我的注意一见钟情是(按顺序) -
_activityViewController
@"UIViewController"
_contentController
@"_UIActivityViewControllerContentController"
_activityAlertController
@"UIAlertController"
在进一步检查他们,我发现_contentController
是一个我们应该在寻找。我们需要在UICollectionViewController
的层次结构中查找更深层次的某个层次,以便到达我们想要的位置。
if let activityContentController = activityVC.value(forKeyPath: "_contentController") as? UIViewController {
print("Found _contentController!")
for child in activityContentController.childViewControllers {
print(String(describing: child))
if child is UICollectionViewController {
print("Found UICollectionViewController!")
break
}
}
}
我为什么要找UICollectionViewController
?
Debug View Hierarchy
已经为此解答。
我尝试添加这是一个childViewController
我UIViewController
-
self.addChildViewController(child)
child.didMove(toParentViewController: self)
self.view.addSubview(child.view)
child.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
child.view.topAnchor.constraint(equalTo: self.view.topAnchor),
child.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
child.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
child.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
])
IT只有正确如果您装入/ PRESENTED UIActivityViewController
FIRST显示出来。
我能够使用这种无声的存在以获得/解雇呼叫 -
self.present(activityVC, animated: false, completion: {
self.dismiss(animated: false, completion: nil)
})
IS THIS APP STORE安全吗? - 最有可能不是。
当您开始从UIKit
的标准组件中盗取view(s)
或viewController(s)
时,行为并不稳定,并且会随着即将到来的更新而中断。
谷歌的照片是什么是更先进的逆向工程的结果。在上面的实现中,您看不到更多选项屏幕。等级UIActivityViewController
预计会中断。
希望这会有所帮助。
尽管我希望能有比这更完整的东西,但我花了很多时间试图找到工作解决方案,然后继续颁发奖金。谢谢你的努力。 – Donut