2016-09-05 2 views
0

Поэтому я создала UIImageView и этикетки, и соединить их в один UIView (как моя картина, показанная здесь)Проблемы с оказывающего UIView к UIImage

enter image description here

И я сделал следующее, чтобы сделать этот взгляд на UIImage и делиться им, что приведет к UIActivityViewController.

@IBOutlet var viewBack: UIView! 
    @IBOutlet var dismissButton: UIButton! 
    @IBOutlet var shareButton: UIButton! 
    @IBOutlet var imageView: UIImageView! 
    @IBOutlet var hello: UILabel! 



    var image = UIImage() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     shareButton.backgroundColor = UIColor.grayColor() 
     shareButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
     shareButton.layer.cornerRadius = 10 
     // Do any additional setup after loading the view. 
     dismissButton.backgroundColor = UIColor.grayColor() 
     dismissButton.layer.cornerRadius = 10 
     viewBack.backgroundColor = UIColor(white: 1, alpha: 0.0) 
     UIGraphicsBeginImageContextWithOptions(viewBack.bounds.size, viewBack.opaque, 0.0) 
     viewBack.drawViewHierarchyInRect(viewBack.bounds, afterScreenUpdates: false) 
     imageView.drawViewHierarchyInRect(imageView.frame, afterScreenUpdates: false) 
     hello.drawViewHierarchyInRect(hello.frame, afterScreenUpdates: false) 
     let snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     print(snapshotImageFromMyView) 
     image = snapshotImageFromMyView 




    } 
    @IBAction func dismiss(sender: AnyObject) { 
     dismissViewControllerAnimated(true, completion: nil) 
    } 

    @IBAction func share(sender: AnyObject) { 
     var shareArray : [AnyObject] = [] 
     shareArray.append(image) 
     let activityVC = UIActivityViewController(activityItems: shareArray, applicationActivities: nil) 
     if let popover = activityVC.popoverPresentationController{ 
      popover.sourceView = sender as? UIView 
      popover.sourceRect = sender.bounds 
     } 

     self.presentViewController(activityVC, animated: true, completion: nil) 
    } 

Так viewBack является UIView содержит два subviews- The UIImage и этикетку. И похоже, что я обычно настраивал процедуру рендеринга. Но когда я действительно обмениваюсь им, результат действительно странный, черный. По-видимому, я установил свой образ на конкретное изображение, а метка тоже не пуста. Я не знаю, что здесь не так, надеюсь, кто-нибудь может мне помочь. Заранее спасибо. enter image description here

ответ

1

Вы пытаетесь создать из представления прежде, чем он будет правильно отображаться. Вы можете создать изображение в файле doAppear или нажать кнопку совместного доступа. Попробуйте этот модифицированный код.

@IBOutlet var viewBack: UIView! 
@IBOutlet var dismissButton: UIButton! 
@IBOutlet var shareButton: UIButton! 
@IBOutlet var imageView: UIImageView! 
@IBOutlet var hello: UILabel! 



var image = UIImage() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    shareButton.backgroundColor = UIColor.grayColor() 
    shareButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
    shareButton.layer.cornerRadius = 10 
    // Do any additional setup after loading the view. 
    dismissButton.backgroundColor = UIColor.grayColor() 
    dismissButton.layer.cornerRadius = 10 
    viewBack.backgroundColor = UIColor(white: 1, alpha: 0.0) 

} 
@IBAction func dismiss(sender: AnyObject) { 
    dismissViewControllerAnimated(true, completion: nil) 
} 

@IBAction func share(sender: AnyObject) { 

    UIGraphicsBeginImageContextWithOptions(viewBack.bounds.size, viewBack.opaque, 0.0) 
    viewBack.drawViewHierarchyInRect(viewBack.bounds, afterScreenUpdates: false) 
    imageView.drawViewHierarchyInRect(imageView.frame, afterScreenUpdates: false) 
    hello.drawViewHierarchyInRect(hello.frame, afterScreenUpdates: false) 
    let snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    print(snapshotImageFromMyView) 
    image = snapshotImageFromMyView 

    var shareArray : [AnyObject] = [] 
    shareArray.append(image) 
    let activityVC = UIActivityViewController(activityItems: shareArray, applicationActivities: nil) 
    if let popover = activityVC.popoverPresentationController{ 
     popover.sourceView = sender as? UIView 
     popover.sourceRect = sender.bounds 
    } 

    self.presentViewController(activityVC, animated: true, completion: nil) 
} 
+0

Проблема решена! Очень благодарен –

Смежные вопросы