2017-12-28 4 views
0

enter image description hereWie CGGraphics durch andere Ausrichtung neu gezeichnet werden?

enter image description here

I UIView Klasse Linien über die Ansicht anzuzeigen:

import UIKit 

class DrawLines: UIView 
{ 
    override init(frame: CGRect) 
    { 
     super.init(frame: frame) 
    } 

    required init?(coder aDecoder: NSCoder) 
    { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func draw(_ rect: CGRect) 
    { 
     let context = UIGraphicsGetCurrentContext() 
     context!.setLineWidth(2.0) 
     context!.setStrokeColor(UIColor.white.cgColor) 

     //make and invisible path first then we fill it in 
     context!.move(to: CGPoint(x: 0, y: 0)) 
     context!.addLine(to: CGPoint(x: self.bounds.width, y:self.bounds.height)) 
     context!.strokePath() 
    } 
} 

Und Hauptklasse zu nennen ...

import UIKit 

class GraphViewController: UIViewController 
{ 
    @IBOutlet weak var graphView: UIView! 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let draw = DrawLines(frame: self.graphView.bounds) 
     view.addSubview(draw) 
    } 

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
     if UIDevice.current.orientation.isLandscape 
     { 
      print("landscape") 
     } 
     else 
     { 
      print("portrait") 
     } 
    } 
} 

Allerdings gibt es ein Problem, wenn ich den Bildschirm drehen. Wie ich das Problem verstanden - es ist immer die Höhe und Breite des Bildschirms verwenden, so dass ich im Querformat überprüfen sollte, und setze:

let yLandscaped = self.bounds.width 
let xLandscaped = self.bounds.height 

Aber ich weiß nicht, wie man alle Linien innerhalb der löschen Aussicht?

+1

hoffe, dies wird Ihnen helfen: https://stackoverflow.com/questions/2526162/iphone-sdk-how-to-trigger-drawrect-on-uiview-subclass-after-orientation-change/9023348 –

+0

Dies löst nur die Mehrfachausgabe, aber das Problem bleibt. – Oleksandr

Antwort

0

Wenn ich versuchte zu drehen - es dauert vorherige Grenzen der Sicht, wie ich verstanden habe. So dass ich X und Y Ursprünge der Ansicht umgekehrt habe. Aber wenn Sie es zuerst laden, sollte es nur view.bounds sein. Allerdings habe ich versucht, die Höhe von Bild -10 und darunter zu schneiden, sollte ein leerer Platz, aber es ist ein Teil des gleichen Bildes, bevor es gedreht wurde! Um es zu beheben, müssen Sie nur

vor jeder Umdrehung setzen. Funktioniert super!

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let draw = DrawLines(frame: self.view.bounds) 
    view.addSubview(draw) 
} 

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    if UIDevice.current.orientation.isLandscape 
    { 
     print("landscape") 
     while let subview = self.view.subviews.last 
     { subview.removeFromSuperview() } 
     let draw = DrawLines(frame: CGRect(x: self.view.bounds.origin.y, y: self.view.bounds.origin.x, width: self.view.bounds.height, height: self.view.bounds.width)) 
     view.addSubview(draw) 
    } 

    else 
    { 
     print("portrait") 
     while let subview = self.view.subviews.last 
     { subview.removeFromSuperview() } 
     let draw = DrawLines(frame: CGRect(x: self.view.bounds.origin.y, y: self.view.bounds.origin.x, width: self.view.bounds.height, height: self.view.bounds.width)) 
     view.addSubview(draw) 
    } 
} 
Verwandte Themen