versiones tutorial plataforma objective example entre diferencias compiler ios objective-c

ios - tutorial - Usando convertPoint para obtener la posición relativa dentro de una UIView padre



objective c vs swift (5)

He analizado una docena de SO preguntas sobre este tema, y ​​ninguna de las respuestas me ha funcionado. Tal vez esto me ayude a volver al camino correcto.

Imagina esta configuración:

Quiero obtener las coordenadas del center del UIButton en relación con el UIView.

En otras palabras, el centro UIButton puede ser 215, 80 dentro de UITableViewCell, pero en relación con la vista UIV, deberían ser más como 260, 165. ¿Cómo convierto entre los dos?

Esto es lo que he intentado:

[[self.view superview] convertPoint:button.center fromView:button]; // fail [button convertPoint:button.center toView:self.view]; // fail [button convertPoint:button.center toView:nil]; // fail [button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]]; // fail

Podría hacerlo de la manera más difícil haciendo un bucle a través de todas las vistas de supervisión del botón y sumando las coordenadas x e y, pero sospecho que eso es una exageración. Solo necesito encontrar la combinación correcta de configuraciones de covertPoint. ¿Derecha?


Aquí está la actualización de Swift 3 de @ la respuesta de Pablo, que, por supuesto, funcionó muy bien en mi caso.

if let window = UIApplication.shared.keyWindow { parent.convert(child.frame.origin, to: window) }


En Swift 2.2 funcionó para mí:

var OrignTxtNomeCliente:CGPoint! if let orign = TXT_NomeCliente.superview, let win = UIApplication.sharedApplication().keyWindow { OrignTxtNomeCliente = orign.convertPoint(TXT_NomeCliente.frame.origin, toView: win) }


La respuesta de Martin es correcta. Para los desarrolladores que usan Swift, puede obtener la posición de un objeto (botón, ver, ...) en relación con la pantalla usando:

var p = obj.convertPoint(obj.center, toView: self.view) println(p.x) // this prints the x coordinate of ''obj'' relative to the screen println(p.y) // this prints the y coordinate of ''obj'' relative to the screen


button.center es el centro especificado dentro del sistema de coordenadas de su supervisión , por lo que asumo que lo siguiente funciona:

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

O bien, calcule el centro del botón en su propio sistema de coordenadas y use eso:

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2, button.bounds.origin.y + button.bounds.size.height/2); CGPoint p = [button convertPoint:buttonCenter toView:self.view];

Swift 4

var p = button.convert(button.center, to: self.view)


Swift 4

Debe llamar a convert desde el botón, no desde la vista de supervisión. En mi caso, necesitaba datos de ancho, así que convertí los límites en lugar de solo el punto central. El siguiente código funciona para mí:

let buttonAbsoluteFrame = button.convert(button.bounds, to: self.view)