[RESOLU][Swift]UITextField custom
Bonjour,
je veux customiser mon propre TextField (pour qu'il ressemble a ceci http://hpics.li/a45135f) et pour ca j'utilise la classe suivant (j'essaie de dessiner le ligne qui est en dessous le cadre pour écrire son identifiant) :
import UIKit
class CustomTextField: UITextField
{
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.attributedPlaceholder = NSAttributedString(string: "Identifier :", attributes: [NSForegroundColorAttributeName : UIColor.whiteColor()])
}
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 1.0)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let components: [CGFloat] = [1.0, 1.0, 1.0, 1.0]
let color = CGColorCreate(colorSpace, components)
CGContextSetStrokeColorWithColor(context, color)
CGContextMoveToPoint(context,self.layer.position.x,self.layer.position.y)
CGContextAddLineToPoint(context, self.layer.position.x+100, self.layer.position.y)
CGContextStrokePath(context)
}
Le problème vient de
CGContextMoveToPoint(context,self.layer.position.x,self.layer.position.y)
CGContextAddLineToPoint(context, self.layer.position.x+100, self.layer.position.y)
Je n'arrive pas à récupérer la position de mon objet et ce n'est apparement pas la bonne manière de faire.
ps: Ce TexteField existe biensure deja dans mon main.storyboard.
J'espère avoir été assez clair.
Dernière petite question : Si dans la création de notre projet nous mettons que c'est que pour Ipad qu'est ce que ca change réellement ? Je pourrais rebasculer l'app sur iphone plus tard ?
Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
2) Pourquoi utiliser directement Core Graphics quand on dispose de UIBezierPath et UIColor ?
3) Pas de problème particulier pour passer sur iPhone plus tard, hormis les adaptations d'IHM.
layer.position, tout comme view.center, donnent les coordonnées du centre du layer (respectivement de la vue)... dans son conteneur parent. view.center par exemple donne les coordonnées du centre de la vue dans sa superview, et indiquent donc où est positionnée cette vue dans la vue parente. Tout comme la frame indique les coordonnées du rectangle englobant de la vue dans sa vue parente. Si textfield.center.x et textfield.center.y sont grand, ça veut juste dire que ton textfield est plutôt positionné en bas à droite de l'écran, alors qu'avec un textfield.center ayant un x et y petits le textfield sera plutôt en haut à gauche de l'écran.
Tout ceci n'est pas du tout des coordonnées qui te seront utiles pour dessiner à l'intérieur de ta vue. Pour dessiner dans ton textfield, et ce quel que soit son emplacement à l'écran, toi tu veux plutôt te baser sur les bounds (de ta vue ou de ton layer), et pas la frame ou le center. Le 0,0 des bounds d'une vue sont en haut à gauche de la vue en question, quel que soit l'endroit où cette vue est positionnée à l'écran.
SI j'ai bien compris si j'utilise "bounds", cela va me permettre de dessiner dans mon objet qui est le textfield? Cependant lorsque je dessine mon bezier il me faut des coordonnés, comment suis-je censé faire (je dois utiliser bounds.witdth/height?)?
Et sinon, vu les questions que tu as l'air de te poser, il est urgent d'aller lire le Quartz 2D Programming Guide qui explique tous les concepts qu'il est nécessaire de comprendre pour dessiner, y compris toutes les explications schemas à l'appui sur les systèmes de coordonnées et exemples de code pour comment dessiner sur une vue, avec les différentes façons possibles (via le layer, via le drawRect, via un UIBezierPath...)
Logiquement si l'origine est (0,0), moi je voudrais tracer une ligne du point (0,1) à (1,1) ? Pour tracer une ligne en dessous de mon textfield? Merci pour le lien.
Mais bon je vais pas te faire un cours là dessus et te réexpliquer tous ces détails du système de coordonnées iOS, de ce qu'est le clipping et comment ça marche, etc... car vraiment, tout est expliqué dans les détails dans le Programming Guide où tu auras toutes les réponses à tes questions, donc va vraiment le lire tu y verras bien plus clair.