Créer un rectangle avec deux coins arrondis en swift?
J'ai besoin de créer un rectangle qui ont seulement deux des coins arrondis en swift (Objective-C, le code ok).
Pour le moment mon code est la création de deux rectangles avec
CGPathCreateWithRoundedRect(CGRectMake(0, 0, 30, 60), 5, 5, nil);
et
CGPathCreateWithRoundedRect(CGRectMake(0, 0, 30, 60), 0, 0, nil);
et de les fusionner (deux coins à angle droit et deux arrondis), mais je ne suis pas heureux avec le code et je suis assez sûr il devrait y avoir beaucoup de meilleures façons de le faire.
Je suis nouveau sur iOS et développement graphique et swift.
- developer.apple.com/library/ios/documentation/UIKit/Reference/...:
bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:
- Comme d'habitude il y a eu *de nombreux petits changements dans Swift, par exemple, à la capitalisation de constantes, etc etc. Suggérer de faire défiler à nouveau la réponse.
Vous devez vous connecter pour publier un commentaire.
Dans Swift 2.3 vous pouvez le faire en
Dans Objective-C vous pouvez utiliser le
UIBezierPath
méthode de classeexemple de mise en œuvre-
et d'appeler la méthode ci-dessus comme-
Voici un rapide Swift 3 extension que vous pouvez utiliser pour faire les arrondis et facultatif frontières.
Remarque: si vous utilisez la mise en forme automatique, vous devrez peut-être appeler cela de la vue du cycle de vie des rappels comme
viewDidLayoutSubviews
oulayoutSubviews
après le point de vue a été restreinte.viewDidLayoutSubviews
fullyRound
méthode qui fonctionne pour la mise en page automatique de vues, car l'image n'est pas de l'installation si elle est appelée à partir deviewDidLoad
codeoverride func viewDidLayoutSubviews()
et c'est l'introduction de beaucoup de lag et ajustés à la position/a diminué le bouton. Ont également tenté :@IBOutlet fileprivate weak var button: UIButton! { didSet { button.round(corners: [.topRight, .bottomLeft], radius: 50 , borderColor: UIColor.blue, borderWidth: 5.0) button.layoutSubviews() } }
le gal est maintenant disparu, mais le bouton est encore rétréci/non contraint correctement. Merci! Merci!addBorder(mask:borderColor:borderWidth:)
méthode, car il est toujours en ajoutant une nouvelle couche. SiviewDidLayoutSubviews
oulayoutSubviews
est appelé 5 fois à l'aide de laround(corners:radius:borderColor:borderWidth:)
méthode dans un vide UIView... ce point de vue aura 5 sous-couches!lineWidth
ne pas vérifier l'échelle de l'écran, de sorte que leborderWidth
devrait être multiplié avecUIScreen.main.scale
.viewDidLayoutSubviews
du cycle de vie de rappelSwift 4+, iOS 11+
Si vous avez déjà un
UIView
nommémyView
référencé comme unIBOutlet
, essayez d'ajouter les deux lignes suivantes dansViewDidLoad()
ou partout où il est en cours de chargement:Vous pouvez modifier le tableau
[]
à toute combinaison deMinX
,MinY
,MaxX
, etMaxY
sélectionnez l'un des coins. L'exemple ci-dessus des tours de la partie inférieure de deux coins.C'est juste une autre approche, peut-être un peu plus simple en fonction de votre conception.
Swift 3 - Utile
UIView
extension lorsque vous avez besoin d'arrondir des angles donnés de certains points de vue:puis il suffit de l'utiliser comme ceci:
De construction sur le dessus de Sanjay excellente réponse, j'ai écrit un rapide CALayer extension pour Swift 2.3, dans le cas où vous avez besoin pour faire ce genre de "seulement autour de quelques coins" chose plus d'une fois.
Utilisation:
Swift 3.0 (Dans cet exemple, les limites sont venus de le point de vue non pas de la couche. En utilisant les limites de l'affichage de ce code pour travailler avec des vues dans un UITableViewCell.):
Utilisation:
Ici est ce que vous faites dans Swift 2.0
2017...
Pour seulement certains coins, il suffit de changer d':
Noter que comme d'habitude il y a eu beaucoup de petits changements dans Swift, par exemple, à la capitalisation de constantes, etc.
Swift 4:
Mis à jour iWasRobbed la réponse de travailler avec la Swift 3.0 version GM:
Objective-C version de iWasRobbed réponse:
UIView+RoundCorners.h
UIView+RoundCorners.m
Explication
Depuis le
CACornerMask
rawValue est unUInt
vous maintenant qu'unCACornerMask
rawValue est la somme de chaqueCACornerMask.Element
rawValuePlus précisément:
layerMinXMinYCorner
) = 1layerMaxXMinYCorner
) = 2layerMinXMaxYCorner
) = 4layerMaxXMaxYCorner
) = 8Ainsi, par exemple, si vous voulez en haut à gauche et en haut à droite des coins, vous pouvez simplement taper
CACornerMask(rawValue: 3)
.Exemple
Ci-dessous une simple extension d'un
UIView
Vous pouvez l'utiliser comme:
Un simple hack pourrait être comme suit. Prendre des vues comme l'exemple ci-dessous de l'image. Rouge Vue va avoir des coins arrondis et Jaune Vue (à l'intérieur Rouge de la Vue) permettra d'éviter les angles à arrondir
Maintenant écrire de code ci-dessous pour Rouge Vue.
Assurez-vous de ne pas écrire du code comme clipsToBounds = true ou masksToBounds = true.
Image ci-dessous est le résultat
Placement de Jaune Vue décidera, dont 2 coins ne seront pas arrondis. J'espère que cela est facile à mettre en œuvre.