2017-02-10 5 views
0

У меня есть UIImage, что я пытаюсь отобразить в определенный момент, но когда я звоню:UIImage не будет отображаться на экране

image.draw(at: CGPoint.zero) 

изображение не показывает. Однако, если я создаю UIImageView с изображением и добавлю это изображение в один из UIStackViews в мою иерархию представлений, изображение будет четко показано. Как я могу нарисовать свое изображение в начале окна?

ответ

4

Эти методы ничьей не нарисованы до UIWindow s/UIView s, они рисуют до текущего CGContext.

Проверьте документацию: https://developer.apple.com/reference/uikit/uiimage/1624132-draw «Рисование изображения в указанной точке в текущем контексте».

Например:

UIGraphicsBeginImageContext(image.size) 
image.draw(at: CGPoint.zero) 
let newImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

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

Вот площадка, которая показывает быстрый пример, где красный квадрат является вид изображения «плавающий» над приложением:

Playground Example

//: Playground - noun: a place where people can play 

import UIKit 
import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

class ContainerViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = UIColor.white 
     addImageViewOverlay() 
    } 

    func addImageViewOverlay() { 
     let overlayImageView = UIImageView() 
     overlayImageView.backgroundColor = UIColor.red 
     overlayImageView.translatesAutoresizingMaskIntoConstraints = false 

     view.addSubview(overlayImageView) 
     overlayImageView.widthAnchor.constraint(equalToConstant: 50.0).isActive = true 
     overlayImageView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true 
     overlayImageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10.0).isActive = true 
     overlayImageView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10.0).isActive = true 
    } 

    func embed(childController: UIViewController) { 
     // In a real application you'd remove the existing child controller first 
     addChildViewController(childController) 

     childController.view.translatesAutoresizingMaskIntoConstraints = false 

     view.insertSubview(childController.view, at: 0) 
     childController.didMove(toParentViewController: self) 

     childController.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
     childController.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     childController.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     childController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 
    } 

} 

let containerController = ContainerViewController(nibName: nil, bundle: nil) 
containerController.view.frame = CGRect(x: 0.0, y: 0.0, width: 320.0, height: 480.0) 

let applicationController = UITabBarController(nibName: nil, bundle: nil) 

let tabOneController = UIViewController(nibName: nil, bundle: nil) 
tabOneController.title = "One" 

let tabTwoController = UIViewController(nibName: nil, bundle: nil) 
tabTwoController.title = "Two" 

applicationController.viewControllers = [tabOneController, tabTwoController] 

containerController.embed(childController: applicationController) 

PlaygroundPage.current.liveView = containerController.view 
+0

так, как бы я сделать изображение в происхождении окна? – shoe

+0

Вам нужно добавить 'UIImageView' в качестве подсмотра окна, что является плохой практикой. Если вы хотите, чтобы какой-то образ присутствовал поверх всего вашего приложения, изучите использование контроллера представления контейнера. Он может содержать основной контроллер представления содержимого вашего приложения и предоставлять некоторые виды аксессуаров, которые могут отображаться сверху. –

+0

Я добавил игровую площадку к ответу, который показывает, как вы могли бы это сделать. –

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