UIView中的iOS UIScrollView

Posted

技术标签:

【中文标题】UIView中的iOS UIScrollView【英文标题】:iOS UIScrollView in UIView 【发布时间】:2011-04-13 16:11:29 【问题描述】:

我有一个具体的问题。对大多数人来说这可能无关紧要,但我不得不处理它,我必须解决下面描述的问题。我尝试使用 Google 和 Apple SDK 文档查找有关它的一些信息,但没有成功。

我正在设计一个屏幕,其中有许多水平滚动的图像。三个三个相同的卷轴。每个卷轴都有标题。我已经实现了从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的属性,例如directionalLockEnabledpagingEnabledcanCancelContentTouchesdelaysContentTouchesdecelerationRate等。事实上,我已经尝试更改 UIScrollView 的几乎所有属性,但我无法让滚动条立即消失。

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

所以这是我的问题:

    你知道我为什么会看到这种行为吗? 如何获得UIView 封装的滚动“通常”行为?

【问题讨论】:

这个运气好吗?我从 UIScrollView 派生类中得到了相同的行为,但仅在 ios 5 中。它在 4.x 中工作正常 【参考方案1】:

好的,下面是hacky代码,所以忽略我所有的其他问题,但遵循这个模式(westie.jpg = image that was 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;

@结束

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

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

【讨论】:

以上是关于UIView中的iOS UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

不同uiview中的iOS MultiTouch事件

如何使用动画概念将一个 UIview 推送到 ios 中的另一个 UIview?

iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView

iOS UIView中的坐标转换

iOS UIView中的坐标转换

UIView子视图中的IOS UIImagePicker