iphone - Determine las coordenadas de un UITableViewCell mientras se desplaza
fade (4)
¿Por qué no una superposición con un gradiente de PNG parcialmente transparente en un UIImageView que es menos translúcido en la parte superior e inferior?
Jugar con el dibujo de la celda en el desplazamiento de tablas va a tener un gran impacto en el rendimiento.
Mi objetivo es hacer que los UITableViewCells aparezcan y desaparezcan cuando se aproximen a los límites del UITableView y estén a punto de ser cubiertos / revelados.
El enfoque que he estado intentando es obtener las coordenadas del UITableViewCell durante un evento de desplazamiento. El problema es que cada celda parece estar en 0,0. He intentado convertir las coordenadas a la tabla principal y a la vista, pero aún salen a 0,0.
Entonces, en general, si alguien conoce una forma de obtener las coordenadas, o una mejor manera de hacer que las UITableViewCells se desvanezcan en función de su posición, agradecería enormemente cualquier consejo que pueda tener.
Gracias por tu tiempo, Joel
El primer paso es utilizar
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];
que informará el CGRect de una celda dentro de tableView. Sin embargo, este valor no cambia a medida que el tableView se desplaza. Es la posición relativa a la primera fila de la tabla (y no a la primera fila visible). Para obtener la posición de la celda en la pantalla, debe convertirla al sistema de coordenadas de superviews utilizando
CGRect rect = [tableView convertRect:rectInTableView toView:[tableView superview]];
Así que la siguiente línea lo hace todo.
CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:[tableView superview]];
Swift 4
// Consider the indexPath at row 1, section 0.
let rectWithinTableView : CGRect = self.tableView.rectForRow(at: IndexPath(row: 1, section: 0))
let rectWithSuperViewCoordinates : CGRect = self.convert(rect: rectWithinTableView, to: self.tableView.superview)
Puedes llamar
- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;
para obtener el rect de cualquier celda dada. Esto contendrá sus coordenadas en la estructura de origen dentro de la rect.
Sospecho que las celdas se mantienen dentro de subvistas de ''tamaño de celda'' de la UITableView, por lo que está viendo un marco relativo a esa vista.
No tengo una respuesta real para usted, pero sugeriría revisar la clase de delegados de UIScrollView: UIScrollViewDelegate. Responde a – scrollViewDidScroll:
y puede calcular manualmente su desplazamiento a partir de eso. UIScrollView es una superclase de UITableView.
Puede convertir los puntos (como su origen) en coordenadas de otra vista utilizando el método de vista UIView - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
.