UIScrollView背景图像比内容滚动得更快

时间:2010-08-04 17:10:46

标签: iphone objective-c uiscrollview

我刚注意到,在UIScrollView中有一个backgroudn图像以及其他一些UI元素,它们以不同的速度滚动。

我在主视图中创建了一个UIScrollView子项,添加了以下测试代码:

-(void)viewDidLoad {
[super viewDidLoad];

oRulerYear.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"bg.png"]];
//bigsize!
[oRulerYear setContentSize:CGSizeMake(2400,100)]; 

CGFloat x = 0;
CGFloat y = 0;

CGRect rect = CGRectMake(x , y, 120.0f, 45.0f);

//label 1
UILabel *label = [[[UILabel alloc] initWithFrame:rect] autorelease];
[label setText:@"Foo"];
[oRulerYear addSubview:label];


//label 2
x = 2000;
y = 10;
rect = CGRectMake(x , y, 120.0f, 45.0f);
UILabel *label2 = [[[UILabel alloc] initWithFrame:rect] autorelease];
[label2 setText:@"Bar"];
[oRulerYear addSubview:label2];

}

滚动DOES工作,但我看到两个标签标签上的滚动速度不同。 所以它非常像一个1980年的PC游戏,或者恢复视差滚动或者它被称为。背景似乎比前景滚动得快。

任何想法如何防止这种行为?

1 个答案:

答案 0 :(得分:1)

您需要在分页UIScrollView的子视图上设置背景模式,而不是在分页UISCrollView本身上设置背景模式。

#define OUTERPADDING 160
CGRect backgroundFrame = CGRectMake(-OUTERPADDING, 0,
     pagingScrollView.contentSize.width + 2*OUTERPADDING,
     pagingScrollView.contentSize.height);
UIView * backgroundView = [[UIView alloc] initWithFrame:backgroundFrame];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:
        [UIImage imageNamed:@"walnut"]];
[pagingScrollView addSubview:backgroundView];

此视图必须与内容大小一样大,更清晰的结果。 OUTERPADDING用于确保在第一页和最后一页之前将图案应用于屏幕的一半