2011-11-15 4 views
-4

Je dois développer un Guide TV iPad qui ressemble à What's On TV.Application iPad Guide TV

J'ai essayé de le faire en utilisant UITableView avec beaucoup de lignes comme le nombre de canaux. Afin de créer une sorte de grille, j'ai ajouté une sous-vue pour chaque ligne qui contient tous les programmes (UIButton avec une taille différente). Afin de faire défiler la vue horizontalement, j'ai ajouté un outil de reconnaissance de gestes et changé la position UIView (cellule de sous-vue) chaque fois que je fais un balayage vers la droite ou vers la gauche.

Cela fonctionne, mais la solution me semble un peu brouillon et l'animation n'est pas si réactive. Avez-vous une idée (ou un exemple) pour une meilleure solution? Qu'en est-il de html5?

Merci

Mon code:

dans ViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

    _chName = (UILabel *)[cell viewWithTag:4]; 
    _chName.text=((Channel *)[_resultEPGChannel objectAtIndex:indexPath.row]).name; 

    _viewCell = (UIView *)[cell viewWithTag:2]; 
    _viewCell.frame=CGRectMake(-_positionView, 0,2000, 77); 

    //add the view to the _viewCell (moving view) with the right program for each channel (row) 
    cp = [[ChannelProgram alloc] init] ; 
    cp.allProgram=[_resultEPGProgram objectAtIndex:indexPath.row]; 

    [_viewCell addSubview:cp]; 

    return cell;} 

Dans ChannelProgram.m (sous-classe de UIView)

- (void)drawRect:(CGRect)rect{ 

    int xPoint=2; 

    for (Program *singleProgram in allProgram) { 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

     button.backgroundColor=[UIColor lightGrayColor]; 

     [button setTitle:singleProgram.title forState:UIControlStateNormal]; 
     button.frame=CGRectMake(xPoint,0, singleProgram.lengthProgram,75); 
     [self addSubview:button]; 
     xPoint = xPoint+singleProgram.lengthProgram+2;} 

L'animation, il est très lent, et devenir pire chaque fois que je devais recharger la table. Qu'est-ce qui ne va pas?

+0

Exécutez le programme via un profileur. – Edwin

Répondre

0

Événement drawRect est propre dessiner, chaque fois que vous redessinez créer UIButton, vous pouvez obtenir beaucoup de UIButton beaucoup plus que nécessaire.

UIButton est un contrôle, vous pouvez simplement l'ajouter à ChannelProgram au - (id)initWithFrame:(CGRect)frame ou - (id)initWithCoder:(NSCoder *)aDecoder, cela ne causera pas de gaspillage de mémoire.

+0

Merci pour la réponse .. J'ai utilisé initWithFrame et fonctionne comme un charme! – user1047132