• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

UIView Border Color

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo,

ich habe in meinem Code zwei UIViews und möchte nun für beide jeweils auf einer Seite den Rand einfärben. Bei der einen UIView funktioniert das auch, bei der anderen jedoch nicht. Weiß zufällig jemand warum ? Hier der Code:

PS: rightBorder funktioniert nicht

Code:
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var leftBorder: UIView!
    @IBOutlet weak var rightBorder: UIView!
   

    override func viewDidLoad() {
        super.viewDidLoad()
       
        leftBorder.addBorder(toSide: .Right, withColor: UIColor.white.cgColor, andThickness: 1.0)
        rightBorder.addBorder(toSide: .Left, withColor: UIColor.white.cgColor, andThickness: 1.0)
               // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension UIView {
   
    // Example use: myView.addBorder(toSide: .Left, withColor: UIColor.redColor().CGColor, andThickness: 1.0)
   
    enum ViewSide {
        case Left, Right, Top, Bottom
    }
   
    func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) {
       
        let border = CALayer()
        border.backgroundColor = color
       
        switch side {
        case .Left: border.frame = CGRect(x: frame.minX, y: frame.minY, width: thickness, height: frame.height + 200.0); break
        case .Right: border.frame = CGRect(x: frame.maxX, y: frame.minY, width: thickness, height: frame.height + 200.0); break
        case .Top: border.frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: thickness); break
        case .Bottom: border.frame = CGRect(x: frame.minX, y: frame.maxY, width: frame.width, height: thickness); break
        }
       
        layer.addSublayer(border)
    }
}
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Du berechnest den Frame für den „Border-Layer“ auf Basis des View-Frames. Das würde nur funktionieren, wenn der View in der oberen Linken Ecke liegt, also bei Punkt (x: 0, y:0). Du musst das Koordinatensystem des View verwenden, also die 'bounds'. Außerdem musst du die Breite bei der Positionierung des „Border-Layer“ für die Fälle .Right und .Bottom berücksichtigen.

Übrigens ist in den case Statements am Ende kein 'break' nötig. Das ist in Swift das Standardverhalten.
 
  • Like
Reaktionen: ThisIsBeat

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Du berechnest den Frame für den „Border-Layer“ auf Basis des View-Frames. Das würde nur funktionieren, wenn der View in der oberen Linken Ecke liegt, also bei Punkt (x: 0, y:0). Du musst das Koordinatensystem des View verwenden, also die 'bounds'. Außerdem musst du die Breite bei der Positionierung des „Border-Layer“ für die Fälle .Right und .Bottom berücksichtigen.

Übrigens ist in den case Statements am Ende kein 'break' nötig. Das ist in Swift das Standardverhalten.

Super, hat funktioniert ! Vielen Dank :D