2015-06-13 19 views
9

Il problema è spostare un "InfoView" (UIView) a livello di codice in Swift.Come spostare un UIView a livello di programmazione in Swift

le seguenti limitazioni esistono nel storyboard (vedi immagine):

enter image description here

Ora, vorrei spostare la "InfoView" dentro "MyView" su o giù.

ho provato:

@IBOutlet weak var infoTextLabel: UILabel! 
@IBOutlet weak var infoTextLabelView: UIView! 

// set infoTextLabel color 
self.infoTextLabel.textColor = UIColor.blackColor() 
// set infoTextLabel text 
self.infoTextLabel.text = "hello" 
// unhide infoTextLabel 
self.infoTextLabel.hidden = false 

// For the moving in Y-direction, I tried this - but does not work !!!!!!! 
self.infoTextLabelView.frame.origin.y += 200 

poteva il layout automatico-vincoli svolgere un ruolo. Come superare quelli programmaticamente. O è il metodo frame.origin.y quello sbagliato ??

Apprezzare qualsiasi aiuto su questo!

+0

stai cercando di creare un'animazione o stai solo cercando di spostare la posizione della vista w/o una sequenza di animazione? – Jeffrey

+0

Non è necessaria un'animazione! – iKK

risposta

18

Quando si utilizzano i vincoli, non si desidera impostare direttamente il fotogramma di una vista. Invece, riconfigura i vincoli e lascia che il motore di layout automatico imposti il ​​frame della tua vista. Crea un IBOutlet nel tuo controller di visualizzazione per memorizzare un riferimento al tuo "Limite di allineamento del centro Y". Assicurati di collegarlo allo storyboard o allo xib.

@IBOutlet var yConstraint: NSLayoutConstraint 

Quindi è possibile impostare la proprietà costante del vincolo di compensare dalla posizione Y (numero positivo si sposterà verso il basso, si muove negativi su).

yConstraint.constant = 200 

Ciò sposterebbe la vista di 200 punti verso il basso.

+0

Ottimo! Grazie mille! –

9

Vedere la mia risposta a questa altra domanda circa un buon modo di muoversi a livello di codice vista utilizzando il layout automatico: https://stackoverflow.com/a/30687856/3149796

Inoltre, a seconda dell'effetto che si sta andando per e gli altri requisiti della propria interfaccia utente, si potrebbe anche raggiungere questo con trasforma senza disturbare il layout automatico.

// Create a new transform 
self.infoTextLabelView.transform = CGAffineTransformMakeTranslation(0.0, 200.0) 

// Or modify existing transform 
self.infoTextLabelView.transform = CGAffineTransformTranslate(self.infoTextLabelView.transform, 0.0, 200.0 ) 
2

Swift 4

UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: { 
     self.infoTextLabelView.frame.origin.y+=200 

},completion: nil) 
Problemi correlati