2017-04-23 8 views
1

J'ai créé UIView personnaliséne peut pas déplacer UIView sur story-board sur mesure

import UIKit 
@IBDesignable 
class CategoryIcon: UIView { 
let pi:CGFloat = CGFloat(M_PI) 

@IBInspectable var circleColor:UIColor = UIColor.green 
@IBInspectable var width:CGFloat = 10 
@IBInspectable var radius: CGFloat = 20 

override func draw(_ rect: CGRect) { 

    center = CGPoint(x:bounds.width/2 ,y:bounds.height/2) 
    let path = UIBezierPath(ovalIn: rect) 
    path.lineWidth = width 
    circleColor.setStroke() 
    path.stroke() 

} 

} 

Mais quand je l'ajoute au story-board Peu importe où je l'ai mis, il reste dans le coin supérieur gauche de la vue parent as you can see dots shows that view has moved but drawings are out of view and at the left top

quel est le problème et comment peut-il être résolu?

+0

Essayez-vous de dire que peu importe où vous essayez de mettre la vue, il est toujours dans la même position? Ou la position change-t-elle lorsque vous essayez de changer de position? – joshLor

+0

@joshLor reste toujours dans la partie supérieure gauche de la vue parente, partout où je la déplace. mais la chose est si vous regardez le lien que j'ai fourni dans les post 8 points représentant les limites de vue montre qu'il a bougé, en fait ce que j'ai dessiné reste hors de UIView en haut à gauche de la vue parent –

+0

pouvez-vous montrer comment vous implémentez dans le viewcontroller? –

Répondre

0

Supprimer la ligne suivante à partir de votre méthode draw(rect:):

center = CGPoint(x:bounds.width/2 ,y:bounds.height/2) 

Il est généralement déconseillé de changer l'état d'une vue lors de l'exécution du code de dessin. Mais dans ce cas particulier, vous modifiez l'emplacement de la vue frame en fonction de l'origine de son bounds, qui est généralement (0, 0), sauf si vous avez modifié les limites ailleurs. Ce n'est pas clair ce que vous espériez accomplir en faisant cela, mais ce qu'il fait est de déplacer la vue dans le coin supérieur gauche.

+0

Merci beaucoup. Chose est que je dessinais d'abord avec des arcs et dans ce cas j'utilisais le centre. Puis, quand je suis passé à l'ovale, je ne l'ai pas supprimé. D'une certaine manière manqué. Merci pour ton aide. –