Ho una vista con un gesto pan e un UIPushBehavior collegato ad esso e volevo sapere se è possibile controllare quando la vista è fuori dai limiti di supervisione. Fondamentalmente l'utente lancia la vista e voglio eseguire alcune animazioni quando la vista è fuori dallo schermo. Non riuscivo a capire come fare questo. Grazie.Come verificare se un UIView è fuori dai limiti della superview
8
A
risposta
8
Se si desidera controllare se è del tutto fuori di esso c'è limite Superview si può fare questo
if (!CGRectContainsRect(view.superview.bounds, view.frame))
{
//view is completely out of bounds of its super view.
}
Se si vuole verificare se solo una parte di esso è fuori dai limiti si può fare
if (!CGRectEqualToRect(CGRectIntersection(view.superview.bounds, view.frame), view.frame))
{
//view is partially out of bounds
}
1
In Swift 3:
let v1 = UIView()
v1.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
v1.backgroundColor = UIColor.red
view.addSubview(v1)
let v2 = UIView()
v2.frame = CGRect(x: 100, y: 100, width: 200, height: 200)
v2.backgroundColor = UIColor.blue
view.addSubview(v2)
if (v1.bounds.contains(v2.frame))
{
//view is completely inside super view.
}
if (v1.bounds.intersection(v2.frame).width > 0) && (v1.bounds.intersection(v2.frame).height > 0)
{
//view is partially out of bounds
}
1
Purtroppo, la risposta di Philipp in parte fuori controllo limiti non è completamente corretto in questa riga: v1.bounds.intersection(v2.frame).width > 0) && (v1.bounds.intersection(v2.frame).height > 0
La dimensione dell'intersezione può essere maggiore di zero e la vista si troverebbe ancora all'interno dei limiti di superview.
Inoltre, non è possibile utilizzare equal(to: CGRect)
in modo sicuro a causa della precisione di CGFloat.
Qui è corretto versione:
func outOfSuperviewBounds() -> Bool {
guard let superview = self.superview else {
return true
}
let intersectedFrame = superview.bounds.intersection(self.frame)
let isInBounds = fabs(intersectedFrame.origin.x - self.frame.origin.x) < 1 &&
fabs(intersectedFrame.origin.y - self.frame.origin.y) < 1 &&
fabs(intersectedFrame.size.width - self.frame.size.width) < 1 &&
fabs(intersectedFrame.size.height - self.frame.size.height) < 1
return !isInBounds
}
Problemi correlati
- 1. Lista fuori dai limiti in TPageControl
- 2. L'indice era fuori dai limiti della matrice. (Microsoft.SqlServer.Smo)
- 3. Sfocatura UIImmagine fuori dai limiti (stile Photoshop)
- 4. L'indice era fuori dai limiti dell'eccezione dell'array
- 5. Vector andando fuori dai limiti senza dare l'errore
- 6. UICollectionView il layout della cella è fuori dai limiti della vista dell'insieme
- 7. Come rimuovere correttamente il nodo fuori dai limiti dello schermo?
- 8. UIView/CALayer: Trasforma trigger layoutSubviews in superview
- 9. ActionBar non scorre la scheda selezionata se questa è fuori dai limiti visibili dell'azioneBar sullo schermo
- 10. Java: l'indice di array fuori dai limiti Eccezione
- 11. Come verificare se un elemento è fuori dallo schermo
- 12. utilizzando EmbeddedChartBuilder e 'colonne ottenendo sono fuori dai limiti'
- 13. Indice fuori dai limiti (Caret importanza variabile per foresta casuale)
- 14. Parallel.Foreach dando errore "L'indice era fuori dai limiti dell'array"
- 15. Rimuovi UIVIew da SuperView con animazione
- 16. Sottomenu che visualizza all'esterno dei limiti della UIView genitore
- 17. Che cos'è PPB_Graphics2D.PaintImageData: il rettangolo è fuori dai limiti. errore in Chrome?
- 18. Esiste un modo semplice per eseguire il default fuori dai limiti in Seq nidificati in Scala?
- 19. panda fuori dai limiti nanosecondo timestamp dopo compensato rollforward, più l'aggiunta di un mese compensato
- 20. Come ripetere i tipi enumerati inizializzati con Delphi 6 ed evitare l'errore "fuori dai limiti"?
- 21. Come verificare se un puntatore è valido?
- 22. Ottieni la posizione di UIView rispetto alla superview del suo superview
- 23. Qual è la differenza tra l'eccezione fuori indice e l'indice fuori dall'eccezione di limiti di array?
- 24. Clip UIView Proprietà ToBounds: migliora le prestazioni?
- 25. Rilevamento dell'intersezione di due oggetti UIView su diverse superview
- 26. Verificare se è un oggetto
- 27. Come verificare se un oggetto è definito?
- 28. Come verificare se l'oggetto è un vettore
- 29. Come verificare se un DataGridViewCheckBoxCell è verificato
- 30. Come verificare se un buffer è vuoto?
appena provato questo e sembra che la sua sempre chiamato anche quando la vista è ancora nei limiti del superview:/ – mlevi
Se aiutare quello che sto facendo è basata al di fuori di questo tutorial: http://www.raywenderlich.com/71828/uikit-dynamics-tutorial-tossing-views – mlevi
Fondamentalmente voglio fare le cose una volta che la vista è fuori dallo schermo – mlevi