Es posible traducir un UICollectionViewCell's coordenadas de ser relativa a la UICollectionView a la relativa a la superview? Hasta ahora he sido incapaz de traducir un UICollectionViewCell's coordenadas cuando tocó a la superview. He aquí lo que he probado hasta ahora:

- (void)collectionView:(UICollectionView *)collectionView  
        didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = 
     [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" 
                                               forIndexPath:indexPath];

    CGRect frame = CGRectMake(0.0, 
                              0.0,  
                              cell.frame.size.width, 
                              cell.frame.size.height);
    frame.origin = [cell convertPoint:cell.frame.origin 
                               toView:self.view];
}

Me gustaría crear un nuevo marco que se origina de las células de la posición en la vista, no en el UICollectionView. Cualquier ayuda sería genial, gracias.

Qué hace el código anterior? ¿Cuáles son usted, a continuación, haciendo con el marco?
El cuadro resultante darme un origen en relación con el origen de la UICollectionView. Por ejemplo, si una celda ha sido tocado después de ser desplazado 5000 puntos a la izquierda, en el marco de origen después de la conversión sería {5000, 0}.
Después he calculado la posición, me gustaría pasar las coordenadas para una subvista a la pantalla a través de la parte superior del tocado de la célula.

OriginalEl autor Dan Lister | 2012-11-25

3 Comentarios

  1. 33

    Esta respuesta es muy tarde, pero espero que ayude a alguien.
    Dan, usted tiene la idea correcta, pero es incluso más fácil que lo que usted tiene. Basta con sustituir

    CGRect frame = CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height);
    frame.origin = [cell convertPoint:cell.frame.origin toView:self.view];

    con

    CGRect frame = [collectionView convertRect:cell.frame toView:self.view];

    El problema era que estaban llamando el método convert en el celular, no la collectionView.

    La perfección. Yo en serio trató de 50 otras cosas antes que esto. Gracias. #latenightprogramming
    Perfecto, gracias!

    OriginalEl autor LeStro

  2. 3

    Si lo entiendo correctamente, creo que el problema es que primero tienen que corregir para el desplazamiento de la vista contentOffset, que es fácil de hacer ya que UICollectionView es una subclase de UIScrollView.

    CGRect frame = CGRectMake(0.0,
                              0.0,
                              cell.frame.size.width,
                              cell.frame.size.height);
    CGPoint correctedOffset = 
     CGPointMake(cell.frame.origin.x - collectionView.contentOffset.x,
                 cell.frame.origin.y - collectionView.contentOffset.y);
    frame.origin = [cell convertPoint:correctedOffset toView:self.view];

    He probado esto en uno de mis UICollectionView aplicaciones de demostración y parece que funciona. Darle una oportunidad.

    OriginalEl autor Jay Slupesky

  3. 1

    Sólo en caso de que si alguien buscando esto, aquí es cómo se puede hacer en Swift:

    let cellFrameInSuperview = collectionView.convertRect(collectionView.cellForItemAtIndexPath(indexPath)!.frame, toView: view)

    OriginalEl autor AbbasAngouti

Dejar respuesta

Please enter your comment!
Please enter your name here