2011-04-13 95 views
3

我有一点点具体问题。对大多数人来说可能并不重要,但我必须处理它,我必须解决下面描述的问题。我试图使用Google和Apple SDK文档找到关于它的一些信息,但没有成功。UIView iOS UIScrollView

我是一个设计一个屏幕,水平卷轴中有很多图像。有三个三个相同的卷轴。每个卷轴都有标题。我已经实现从UIView派生自定义类,并放在那里UIScrollView的滚动和UILabel为标题文本:

@interface MyView : UIView { 
    UIScrollView *iScrollView; 
    UIView  *iTitleView; 
} 

然后我把这个类的对象上UIViewController的观点:

@implementation MyViewController 

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    iScrollViewTop = [[MyView alloc] init]; 
    [self.view addSubview:iScrollViewTop]; 
    ... 
} 

@end 

当我用图像填充内部滚动视图并运行我的应用程序,看起来没问题。但是有一些奇怪的行为。首先,滚动没有反弹,如果我已经建立

iScrollView.bounces = NO; 

和第二,当我刷卡滚动,滚动停止后,滚动条没有一秒钟内消失。这对我来说很奇怪,因为当我通常创建一个UIScrollView并将其添加到UIViewController的视图时,它已经弹起并且滚动条在停止时立即消失。我试图改变UIScrollView的属性,如directionalLockEnabled,pagingEnabled,canCancelContentTouches,delaysContentTouches,decelerationRate等。实际上,我试图改变UIScrollView的几乎所有属性,但我无法让滚动条立即消失。

如果我尝试将UIScrollView而不是MyView添加到UIViewController.view,它会弹起并且滚动条停止后立即消失。如果我从UIScrollView中继承MyView的子类,我也会得到正确的行为,但在这种情况下,我无法管理标题标签,因为它与其他内容一起滚动。

因此,这里是我的问题:

  1. 你知道为什么我看到这种行为?
  2. 如何获得滚动封装的“常用”行为UIView
+0

对此有何好运?我从UIScrollView派生类获得相同的行为,但只在iOS 5中。它在4.x中正常工作 – Ralfonso 2012-01-21 02:30:37

回答

1

OK,哈克代码如下,所以忽略我的所有其他问题,但遵循此模式(这是360x200 westie.jpg =图像)

@interface MyView : UIView 
{ 
UIScrollView *sv; 
UILabel *l; 
} 
-(MyView*)initWithFrame:(CGRect)frame; 
@end 

@implementation MyView 
-(MyView*)initWithFrame:(CGRect)frame; 
{ 
self = [super initWithFrame:frame]; 
sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,360,200)]; 
sv.scrollEnabled = YES; 
sv.contentSize = CGSizeMake(360*3,200); 
[self addSubview:sv]; 

UIImage *i1 = [UIImage imageNamed:@"westie.jpg"]; 
UIImageView *iv1 = [[UIImageView alloc] initWithImage:i1]; 
iv1.frame = CGRectMake(360*0, 0, 360, 200); 
[sv addSubview:iv1]; 
UIImageView *iv2 = [[UIImageView alloc] initWithImage:i1]; 
iv2.frame = CGRectMake(360*1, 0, 360, 200); 
[sv addSubview:iv2]; 
UIImageView *iv3 = [[UIImageView alloc] initWithImage:i1]; 
iv3.frame = CGRectMake(360*2, 0, 360, 200); 
[sv addSubview:iv3]; 

l = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)]; 
l.text = @"Hello World"; 
l.backgroundColor = [UIColor blueColor]; 
[self addSubview:l]; 

return self; 
} 

@end

后,在您的创建外部视图:

[window addSubview:[[MyView alloc] initWithFrame:CGRectMake(0, 20, 360, 200)]];