簡體   English   中英

如何與 UIActivityViewController 共享圖像

[英]How to share image with UIActivityViewController

我有一個按鈕可以將屏幕截圖分享到 Facebook 等。

分享按鈕:

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)

分享按鈕功能:

    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以讓用戶選擇共享位置

幾天后,我能夠自己解決問題。

正確答案 :

分享按鈕:

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)

分享按鈕功能:

    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!")    
 }

它完美地工作! 祝大家好運!

嘗試設置activityController的原點:

    activityVC.popoverPresentationController?.sourceView = vc?.view
    activityVC.popoverPresentationController?.sourceRect = ShareButton.frame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM