iPad TV指南应用

时间:2011-11-15 10:22:02

标签: objective-c ipad uitableview

我必须开发一个类似的 iPad电视指南 What's On TV

我尝试使用UITableView,其中有许多行作为通道数。为了创建一种网格,我为包含所有程序(UIButton具有不同大小)的每一行添加了一个子视图。为了水平滚动视图,我添加了手势识别器,并在每次向右或向左滑动时更改UIView(子视图单元格)位置。

这很有效,但解决方案在我看来有点混乱,动画也不那么反应。您是否有任何想法(或示例)可以获得更好的解决方案?那么html5呢?

由于

我的代码:

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;}

在ChannelProgram.m(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;}

动画很慢,每次我不得不重新加载桌子时变得最差。怎么了?

1 个答案:

答案 0 :(得分:0)

事件drawRect是自己的绘图,每次重绘你都会创建新的UIButton,所以你可能会获得比你需要的更多的UIButton。

UIButton是一个控件,您只需将其添加到- (id)initWithFrame:(CGRect)frame- (id)initWithCoder:(NSCoder *)aDecoder的ChannelProgram,这不会造成任何内存浪费。