2015-08-24 2 views
3

Я начинаю рано, и я пытаюсь сделать снимок экрана приложения и поделиться им с помощью кнопки совместного доступа. Кнопка «Поделиться» работает, она позволяет мне поделиться своим первоначальным текстом и URL-адресом, просто скриншот, кажется, даже не принят.Взятие скриншота и обмен с кнопкой share

После нескольких дней исследований я обнаружил, что все ответы, скорее всего, слишком продвинуты для меня, и я, вероятно, не знаю основ в начале.

Я не знаю точно, где поставить код, который снимает скриншот, или то, что я должен настроить, чтобы он работал. Я также не знаю, как реализовать скриншот как изображение.

Это мой код для кнопки доли, которая хорошо работает:

func socialShare(sharingText: String?, sharingImage: UIImage?, sharingURL: NSURL?) { 
     var sharingItems = [AnyObject]() 



     if let text = sharingText { 
      sharingItems.append(text) 
     } 
     if let image = sharingImage { 
      sharingItems.append(image) 
     } 
     if let url = sharingURL { 
      sharingItems.append(url) 
     } 

     let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil) 
     activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList, 
      UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo] 
     self.presentViewController(activityViewController, animated: true, completion: nil) 
    } 




    @IBAction func clickShare(sender: AnyObject) { 


     socialShare("Text to share #Hashtag", sharingImage: UIImage(named: "image"), sharingURL: NSURL(string: "http://itunes.apple.com/app/")) 
    } 

И это код, я везде взять скриншот. Но я не заставляю его работать/не знаю, где его разместить, как подключить его к IBAction и как реализовать скриншот в качестве изображения.

//Generate the screenshot 
    UIGraphicsBeginImageContext(view.frame.size) 
    view.layer.renderInContext(UIGraphicsGetCurrentContext()) 
    var image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

Я был бы очень признателен за ответ, который поможет мне найти недостающие основы. Большое спасибо заранее!

ответ

8

Быстрый снимок экрана (без несущей панели состояния) и доля выборки кода:

let bounds = UIScreen.mainScreen().bounds 
    UIGraphicsBeginImageContextWithOptions(bounds.size, true, 0.0) 
    self.view.drawViewHierarchyInRect(bounds, afterScreenUpdates: false) 
    let img = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let activityViewController = UIActivityViewController(activityItems: [img], applicationActivities: nil) 
    self.presentViewController(activityViewController, animated: true, completion: nil) 
+0

Wow спасибо, что полностью это сделал! Но теперь текст и URL-адрес больше не отображаются, нигде. Вы знаете, почему? (Есть ли способ опубликовать весь код на данный момент?) –

+1

@BenBar \t Я просто опустил добавление текста и URL-адреса в свой пример, чтобы быстро показать вам доказательство рабочей концепции. Вы можете легко повторно интегрировать эти части из своего кода (просто добавьте URL-адрес и текст в массив 'activityItems'). Пожалуйста, примите ответ, если я помогу вам. – rshev

+0

Большое спасибо! Это, по-видимому, намного лучшее решение. –

2

Sharing в Swift 3.1

@IBAction func shareButtonClicked(_ sender: Any) { 
    //Set the default sharing message. 
    let message = "Hello!" 
    let link = NSURL(string: "http://stackoverflow.com/") 
    // Screenshot: 
    UIGraphicsBeginImageContextWithOptions(self.view.frame.size, true, 0.0) 
    self.view.drawHierarchy(in: self.view.frame, afterScreenUpdates: false) 
    let img = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    //Set the link, message, image to share. 
    if let link = link, let img = img { 
     let objectsToShare = [message,link,img] as [Any] 
     let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
     activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.addToReadingList] 
     self.present(activityVC, animated: true, completion: nil) 
    } 

} 
+0

Для загрузки в библиотеку фотографий вам нужно добавить NSPhotoLibraryUsageDescription в Info.plist [ссылка из другого ответа] (http://stackoverflow.com/questions/39519773/nsphotolibraryusagedescription-key-must-be-present-in- инфо-PLIST в использовании-камера-р) – AidenX