2013-04-11 48 views
2

我有一個UIScrollView,其中有500多個自定義按鈕,根據用戶的需求,它可以達到1000個。實際上,它是UIButton的一個子類。我使用UIButton類的原因是我必須執行一些操作。對象看起來如下圖像UIScrollView在添加自定義按鈕後行爲不順暢

enter image description here

這些按鈕的安排是這樣,其中行(m)被固定到20,但是列(n)是不固定的m * n個矩陣。可以有500列。

我的問題是添加按鈕後scrollView行爲不順利。我用下面的代碼來創建每個對象

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     sizeLabel = [[UILabel alloc] initWithFrame:sizeLabelRect]; 
     sizeLabel.font = [UIFont boldSystemFontOfSize:sizeLabelFontSize]; 
     sizeLabel.textAlignment = UITextAlignmentCenter; 
//  sizeLabel.backgroundColor = [self colorWithHexString:LABEL_BG_COLOR]; 
//  sizeLabel.layer.cornerRadius = CORNER_RADIUS; 
     [self addSubview:sizeLabel]; 

     nFilesLabel = [[UILabel alloc] initWithFrame:nFilesLabelRect]; 
     nFilesLabel.font = [UIFont boldSystemFontOfSize:nFilesFontSize]; 
     nFilesLabel.textAlignment = UITextAlignmentCenter; 
//  nFilesLabel.backgroundColor = [self colorWithHexString:LABEL_BG_COLOR]; 
//  nFilesLabel.layer.cornerRadius = CORNER_RADIUS; 
     [self addSubview:nFilesLabel]; 

     maxDisimilarity = [[UILabel alloc] initWithFrame:disimilarityRect]; 
//  maxDisimilarity.layer.cornerRadius = CORNER_RADIUS; 
     [self addSubview:maxDisimilarity]; 

//  nFragment = [[UILabel alloc] init]; 
//  nFragment.font = [UIFont systemFontOfSize:nFragmentFontSize]; 
//  [self addSubview:nFragment]; 
    } 
    return self; 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

- (void)setObj:(CloneClass *)obj 
{ 
    NSString *colorCode; 
    if (obj != nil) { 
     _obj = obj; 
     if ([_obj.type isEqualToString:@"1"]) { 
      colorCode = COLOR; 
     } else if ([_obj.type isEqualToString:@"2"]) { 
      colorCode = COLOR; 
     } else if ([_obj.obj isEqualToString:@"Type-3"]) { 
      colorCode = COLOR; 
     } 
     self.backgroundColor = [self colorWithHexString:colorCode]; 
     [self setTitle:[NSString stringWithFormat:@"%d", obj.nFragments] forState:UIControlStateNormal]; 

     // set size of clone class 
     if (_obj.size > LARGE_SIZE) { 
      sizeLabel.text = LARGE_SIZE_TEXT; 
     } else if (_obj.size > MEDIUM_SIZE && _obj.size <= LARGE_SIZE) { 
      sizeLabel.text = MEDIUM_SIZE_TEXT; 
     } else { 
      sizeLabel.text = SMALL_SIZE_TEXT; 
     } 

     // set number of files within a clone class 
     nFilesLabel.text = [NSString stringWithFormat:@"%d", _cloneClass.nFiles]; 

     // set color for disimilarity 
     CGFloat similarity = 1.0 - _cloneClass.maxDisimilarity; 
     maxDisimilarity.backgroundColor = [UIColor colorWithRed:1.0 green:similarity blue:similarity alpha:1.0]; 

    } else { 
     self.backgroundColor = [UIColor grayColor]; 
     [self setTitle:@"/" forState:UIControlStateNormal]; 
    } 

    self.titleLabel.textColor = [UIColor blackColor]; 
} 

scrollView甚至沒有爲10 * 10矩陣工作。

在此先感謝

+0

因爲你已經添加了大量的自定義元素,是我的猜測。您的滾動視圖有多大?你可以修改你的表來垂直工作而不是水平工作,而使用tabel視圖嗎? – Bergasms 2013-04-11 04:01:09

+0

如果我可以修改我的垂直工作,我可以使用UITableView來解決這個問題。不幸的是,我必須水平控制它。 – Avigit 2013-04-11 04:05:12

+0

您正在實施ARC嗎? – DivineDesert 2013-04-11 04:18:06

回答

1

我會考慮UICollectionView。現在您將遇到內存問題。 UICollectionView允許您創建類似於UITableViewCellUICollectionViewCell,可以重複使用。

請參閱Apple Documentation

+0

請記住,在iOS 6.0之前,UICollectionView沒有添加到SDK中,以防需要支持早期版本的操作系統。 – 2013-04-11 04:50:15

+0

這是非常真實的。我傾向於在推動我的操作系統版本時積極主動,我忘了不是每個人都如此幸運。 :) – 2013-04-11 04:51:53

+0

PSTCollectionView是替代UICollectionView的好機會。它在早期版本中的工作原理是相同的,並在UICollectionView可用時用自己替換。 – Bergasms 2013-04-11 04:54:13

相關問題