我有一个有点具体的问题。对于大多数人来说这可能无关紧要,但我不得不处理它并且我必须解决下面描述的问题。我尝试使用 Google 和 Apple SDK 文档查找有关它的一些信息,但没有成功。
我正在设计一个屏幕,其中有许多水平滚动的图像。有三个三个相同的卷轴。每个卷轴都有标题。我已经实现了派生自 UIView
的自定义类,并将 UIScrollView
用于滚动,将 UILabel
用于标题文本:
@interface MyView : UIView {
UIScrollView *iScrollView;
UIView *iTitleView;
}
然后我将此类的对象放在 UIViewController
的 View 中:
@implementation MyViewController
- (void) viewDidLoad {
[super viewDidLoad];
...
iScrollViewTop = [[MyView alloc] init];
[self.view addSubview:iScrollViewTop];
...
}
@end
当我用图像填充内部 ScrollView 并运行我的应用程序时,它看起来不错。但是有一些奇怪的行为。首先,滚动没有弹跳,就像我设置的一样
iScrollView.bounces = NO;
其次,当我滑动滚动时,滚动停止后,滚动条在一秒内没有消失。这对我来说很奇怪,因为当我通常创建一个 UIScrollView 并将其添加到 UIViewController
的 View 时,它会弹跳并且滚动条在停止时立即消失。我尝试更改 UIScrollView
的属性,例如 directionalLockEnabled
、pagingEnabled
、canCancelContentTouches
、delaysContentTouches
、decelerationRate
等。事实上,我已经尝试更改 UIScrollView
的几乎所有属性,但我无法让滚动条立即消失。
如果我尝试将 UIScrollView
而不是 MyView
添加到 UIViewController.view
,它会弹跳并且滚动条在停止后立即消失。如果我从 UIScrollView
继承 MyView
,我也会得到正确的行为,但在这种情况下,我无法管理标题标签,因为它会与其他内容一起滚动。
所以这是我的问题:
- 你知道我为什么会看到这种行为吗?
- 如何获得由
UIView
封装的滚动的“正常”行为?
最佳答案
好的,下面是骇人听闻的代码,所以请忽略我所有的其他问题,但请遵循此模式(westie.jpg = 360x200 的图像)
@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;
}
@结束
稍后,在您的外部 View 创建中:
[window addSubview:[[MyView alloc] initWithFrame:CGRectMake(0, 20, 360, 200)]];
关于UIView 中的 iOS UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652276/