我分爲UIImageView
或UIView
用於生成帶數字的簡單顏色圖塊。如果我使用UIImageView
,我使用initWithImage
方法。如果我使用UIView
,則正在使用方法initWithFrame
。 紅色正方形圖像或以編程方式生成的紅色視圖用於初始化。
在兩個屏幕截圖上可以看到問題:使用initWithImage
時 - 一切正常。如果正在使用initWithFrame
方法,我將以多個白色視圖結束,而不會以普通視圖的順序創建任何信息。所有的截圖和代碼附加。initWithImage工作正常initWithFrame被調用不止一次
此使用initWithImage
初始化時,它的外觀:
- (id)initWithImage:(UIImage *)image {
self = [super initWithImage:image];
if (self) {
//Some non-important, label-related stuff.
[self addSubview:self.numberLabel];
}
return self;
}
,這是它的外觀與initWithFrame
:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.redView = [self redViewWithFrame:frame];
[self addSubview:self.redView];
//label-related stuff
}
return self;
}
- (UIView *)redViewWithFrame:(CGRect)frame {
UIView *view = [[UIView alloc] initWithFrame:frame];
view.backgroundColor = [UIColor redColor];
view.alpha = 1;
return view;
}
而且for循環,調用這些初始化來自另一個類(UIScrollView子類)。標籤值在視圖初始化後設置。
- (void)setNumberOfBlocks:(NSInteger)numberOfBlocks {
_blocks = [[NSMutableArray alloc] init];
CGSize contentSize;
contentSize.width = BLOCK_WIDTH * (numberOfBlocks);
contentSize.height = BLOCK_HEIGHT;
self.contentSize = contentSize;
for (int i = 0; i < numberOfBlocks; i++) {
CGFloat totalWidth = BLOCK_WIDTH * i;
CGRect frame = CGRectMake(0, 0, BLOCK_WIDTH, BLOCK_HEIGHT);
frame.origin.x = totalWidth;
BlockView *view = [[BlockView alloc] initWithImage:[UIImage imageNamed:@"block.png"]];
OR!!!
BlockView *view = [[BlockView alloc] initWithFrame:frame];
view.frame = frame;
NSString *number = [NSString stringWithFormat:@"%ld", (long)i + 1];
view.numberLabel.text = number;
[self addSubview:view];
[_blocks addObject:view];
}
}
谷歌搜索給我的印象是這是非常普遍的問題,但我還沒有找到任何解決方案如何擊敗這個。而且,我還是不明白,爲什麼數字是完全正確的,唯一的問題就是觀點的位置。
儘管這兩個解決方案都對我有幫助,但我決定使用rdelmar的解決方案,因爲它更好(邊界實際上是將原點設置爲(0,0)的框架)。出於某種原因,我決定使用redView而不是backgroundColor屬性 - 這是正確的方法。在項目的某些部分我使用backgroundcolor,也許這是舊的部分...所以,謝謝你。儘管如此,你的答案對我有很大的幫助,因爲在標籤初始化時,它更好地使用邊界而不是幀。我想離開的唯一的意見是,你應該使用'self.bounds'訪問器來調用邊界,而不僅僅是'bounds'。 – 2014-10-12 03:20:35
@RichardTopchiy,是離開自己是一個錯字。 – rdelmar 2014-10-12 04:05:09