【发布时间】:2016-11-06 18:00:14
【问题描述】:
假设您构建了一个在不同设备上全屏显示的图像。然后,您可以使用 UIActivityViewController 以正常方式发布到 - 例如 - Instagram。
用户点击你的分享按钮,它会调出通常的 iOS 分享功能,
并且您可以发布到 Instagram(当然假设用户是 Instagram 用户)。不用担心。
但通常图片在 Instagram 上被裁剪 - 你会丢失一点顶部和底部。
真的有解决办法吗?
请注意,确实 - 假设您在 iPhone 上打开普通的照片应用程序,然后“分享”并在 Instagram 上发帖……您会失去一点顶部和底部!
当用户确实点击了 Instagram 图标时...
事实上,我有办法返回,注意用户的选择,并使图像尺寸合适?
有没有办法将选择的图像(各种尺寸)传递给 UIActivityViewController?
这是怎么回事,这似乎是一个基本的失败?
注意 - 我完全知道在使用 iOS-share-thingy 之前,我可以自己问用户“您希望我制作什么尺寸的图像?”
注意 - 我知道在某些情况下,可以在应用程序内“直接”发布 Instagram,而不使用 Apple 的共享系统;不过这很蹩脚。
为了避免任何人打字,这里有一些干净的代码来启动 iOS 共享系统...
@IBAction func userClickedOurShareButton()
{
let s:[AnyObject] = [buildImage()]
let ac = CleanerActivity(activityItems:s, applicationActivities:nil)
ac.popoverPresentationController?.sourceView = view
// needed so that iPads won't crash. sarcasm: thanks Apple
ac.excludedActivityTypes = [UIActivityType.assignToContact,
UIActivityType.saveToCameraRoll,
UIActivityType.addToReadingList,
UIActivityType.copyToPasteboard ]
// consider UIActivityTypeMessage also
if #available(iOS 9.0, *) {
ac.excludedActivityTypes?.append(UIActivityType.openInIBooks)
} else {
// Fallback on earlier versions
}
self.present(ac, animated:false, completion:nil)
}
class CleanerActivity: UIActivityViewController {
func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool {
let activityTypesToExclude = [
"com.apple.reminders.RemindersEditorExtension",
"com.apple.mobilenotes.SharingExtension",
"com.google.Drive.ShareExtension",
"com.apple.mobileslideshow.StreamShareService"
]
if let actType = activity.activityType {
if activityTypesToExclude.contains(actType.rawValue) {
return true
}
else if super.excludedActivityTypes != nil {
return super.excludedActivityTypes!.contains(actType)
}
}
return false
}
【问题讨论】:
标签: swift3 share instagram uiactivityviewcontroller