Une cellule qui se déplace dans une toolbar

CéroceCéroce Membre, Modérateur
Bonjour à  tous,



Je souhaiterais qu'une cellule d'une UITableView se déplace vers une icône d'une UIToolbar.

Par exemple, dans Mail, si on choisit l'icône de la corbeille, la cellule sélectionnée va dans la corbeille pour rendre l'action explicite.



J'envisage plein de manières de m'y prendre, mais auriez vous une expérience pratique pour le faire de manière simple ?

Réponses

  • CéroceCéroce Membre, Modérateur
    Je me réponds à  moi-même, avec cette approche qui fonctionne:


    <br />
    - (IBAction) download:(id)sender<br />
    {<br />
    	NSIndexPath *selectedCellPath = [self.tableView indexPathForSelectedRow];<br />
    	UIView *fileCell = [self.tableView cellForRowAtIndexPath:selectedCellPath];<br />
    	[self _animateCell:fileCell toDestRect:CGRectMake(40.0f, 380.0f, 80.0f, 28.0f)];<br />
    }<br />
    <br />
    <br />
    - (void) _animateCell:(UIView *)cell toDestRect:(CGRect)destRect<br />
    {<br />
    	CGRect sourceFrame = [self.tableView convertRect:cell.frame toView:nil];<br />
    	UIImageView *imageView = [[UIImageView alloc] initWithFrame:sourceFrame];<br />
    	imageView.image = [[self class] _imageByRenderingView:cell];<br />
      <br />
    	[self.navigationController.view.superview addSubview:imageView];<br />
    	[imageView release];<br />
      <br />
    	[UIView animateWithDuration:0.5<br />
    					 animations:^{<br />
    						 imageView.frame = destRect;<br />
    					 }<br />
    					 completion:^(BOOL finished) {<br />
    						 [imageView removeFromSuperview];<br />
    					 } ];  <br />
    }<br />
    <br />
    + (UIImage *) _imageByRenderingView:(UIView *)view<br />
    {  <br />
    	UIGraphicsBeginImageContext(view.bounds.size);<br />
    	[view.layer renderInContext:UIGraphicsGetCurrentContext()];<br />
    	UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();<br />
    	UIGraphicsEndImageContext();<br />
    	return resultingImage;<br />
    }<br />
    




    La technique consiste à  rendre la cellule visée dans une UIImage, créer une UIImageView avec cette UIImage, la superposer à  la cellule et l'animer.

    J'en suis moyennement satisfait (les coordonnées de destination sont absolues, et je me repose sur le fait de connaà®tre la hiérarchie des vues), mais ça fonctionne.
  • Merci ^^
  • AliGatorAliGator Membre, Modérateur
    Bon à  mettre de côté cette technique.

    Je t'aurais aussi proposé un renderInContext, mais j'aurais pas pensé à  toutes ces subtilités de convertRect & co.
  • CéroceCéroce Membre, Modérateur
    Pour le convertRect, c'est l'habitude de la programmation graphique, mais de toute façon, autrement, tu te rends vite compte qu'il y a un problème puisque l'image view n'apparaà®t pas au bon endroit (en particulier si tu as fais un peu défiler la table).
Connectez-vous ou Inscrivez-vous pour répondre.