首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与UIActivityViewController共享图像

如何与UIActivityViewController共享图像
EN

Stack Overflow用户
提问于 2016-02-14 21:25:08
回答 2查看 1.6K关注 0票数 2

我有一个按钮来分享屏幕截图给Facebook等等。

共享按钮:

代码语言:javascript
复制
ShareButton = UIButton.init(frame: CGRectMake(self.view!.frame.size.width/2 - 80,self.view!.frame.size.height/2 + 140 , 163, 54))
            
            ShareButton.setImage(UIImage(named: "Share-Button.png"), forState: UIControlState.Normal)
            
            ShareButton.addTarget(self, action: "shareButtonClicked:", forControlEvents: .TouchUpInside)
            
            self.view!.addSubview(ShareButton)

ShareButton func :

代码语言:javascript
复制
    func shareButtonClicked(sender: UIButton!) {
            
            UIGraphicsBeginImageContextWithOptions(view!.frame.size, false, 0.0)
            view!.drawViewHierarchyInRect(view!.frame, afterScreenUpdates: true)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext();
            
            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            
            let activityVC = UIActivityViewController(activityItems: [image], applicationActivities: nil)
            
            let vc = self.view?.window?.rootViewController
            
            //New Excluded Activities Code
            if #available(iOS 9.0, *) {
                activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypeOpenInIBooks, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint]
            } else {
                // Fallback on earlier versions
                activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint ]
            }
            
 activityVC.popoverPresentationController?.sourceView = vc?.view
 activityVC.popoverPresentationController?.sourceRect = ShareButton.frame
 vc?.presentViewController(activityVC, animated: true, completion: nil)
            
        }

当我按下按钮时,我会在控制台中看到以下内容:

“其视图不在窗口层次结构中!”

什么都没发生。

什么在起作用:

  • 保存在画廊里的截图

不起作用的

  • 显示UIActivityViewContrller,让用户选择共享的位置
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 20:57:57

几天后,我自己解决了这个问题。

正确答案:

共享按钮:

代码语言:javascript
复制
ShareButton = UIButton.init(frame: CGRectMake(self.view!.frame.size.width/2 - 80,self.view!.frame.size.height/2 + 140 , 163, 54))

                ShareButton.setImage(UIImage(named: "Share-Button.png"), forState: UIControlState.Normal)

                ShareButton.addTarget(self, action: "pressedShareButton:", forControlEvents: .TouchUpInside)

    self.view!.addSubview(ShareButton)

ShareButton func :

代码语言:javascript
复制
    func pressedShareButton(sender: UIButton!) {

            UIGraphicsBeginImageContextWithOptions(view!.frame.size, false, 0.0)
            view!.drawViewHierarchyInRect(view!.frame, afterScreenUpdates: true)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext();

            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

            let activityVC = UIActivityViewController(activityItems: [image], applicationActivities: nil)

            //New Excluded Activities Code
            if #available(iOS 9.0, *) {
                activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypeOpenInIBooks, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint]
            } else {
                // Fallback on earlier versions
                activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint ]
            }

            activityVC.popoverPresentationController?.sourceView = view
            activityVC.popoverPresentationController?.sourceRect = ShareButton.frame
            presentViewController(activityVC, animated: true, completion: nil)


            print("Share!")    
 }

它工作得很完美!祝大家好运!

票数 2
EN

Stack Overflow用户

发布于 2016-02-14 21:40:41

尝试设置activityController的起源:

代码语言:javascript
复制
    activityVC.popoverPresentationController?.sourceView = vc?.view
    activityVC.popoverPresentationController?.sourceRect = ShareButton.frame
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35398162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档