2017-09-30 4 views
1

Ich versuche, eine benutzerdefinierte Ansicht zu erstellen, wo ich einen Button habe, der die gleiche Form wie der Superview haben soll. Also habe ich eine View mit abgerundeten Ecken erstellt. Da möchte ich einen Button am unteren Rand der View und die Ecken an der gleichen Stelle wie die Superview ausschneiden lassen.Ausschneiden hervorragend aus Sicht

Idea

Ich hoffe, dieses Bild gibt eine Vorstellung von dem, was ich meine. Welche Attribute benötigt die Schaltfläche, um die gleiche Form wie die Superansicht zu erhalten. Auch hier der Code wenn es hilft.

let button: UIButton = { 
    let button = UIButton() 
    button.setTitle("Buy", for: .normal) 
    button.titleLabel?.font = UIFont.systemFont(ofSize: 22) 
    //button.setTitleColor(UIColor.blue, for: .normal) 
    button.setTitleColor(UIColor.lightGray, for: .highlighted) 
    button.backgroundColor = .gray 
    button.clipsToBounds = true 
    return button 
}() 
func show(){ 

    self.addSubview(background) 
    self.addSubview(overview) 
    background.frame = self.frame 
    background.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(close))) 
    overview.frame = CGRect(x: 40, y: 40, width: self.frame.width-80, height: self.frame.height-80) 
    let size = overview.frame 


    overview.addSubview(button) 
    let imageHeight = size.height/3 


    button.frame = CGRect(x: 0, y: size.height-38, width: size.width, height: 38) 

    UIView.animate(withDuration: 0.5) { 
     self.background.alpha = 1 
     self.overview.alpha = 1 
    } 
} 

Antwort

1

Add „clipsToBounds“ Eigenschaft auf den superview (Ich hoffe, die Enge getrieben weißen Hintergrund Übersicht Objekt ist) wie folgt,

overview.clipsToBounds = true 

Dies wird seine subview machen mit eckiger Ansicht erscheinen.

2

Versuchen Sie die Einstellung clipsToBounds = true in der Ansicht, die die Schaltfläche enthält. Das sollte es den Knopf abschneiden lassen.

In diesem Fall müssen Sie möglicherweise eine Maske für die Schaltfläche erstellen, die an den unteren Ecken gerundet ist, aber nicht an der Spitze. (Sie können die UIBezierPath-Methode init(roundedRect:byRoundingCorners:cornerRadii:) verwenden, um einen Bezier-Pfad zu erstellen, bei dem nur die unteren Ecken abgerundet sind, und diesen Pfad als CAShapeLayer-Pfad installieren und THAT als Maskenebene für Ihre Schaltfläche installieren.)