UIScrollview对任何触摸没有反应?

时间:2014-12-08 13:57:34

标签: ios objective-c uiscrollview

我正在尝试做一个简单的滚动,但是触摸后视图不会移动,我不知道为什么,scrollview应该处理手势,但可能会丢失某些内容。有人知道在哪里吗?

这是代码:我创建一个小的水平滚动视图,里面有一些视图。视图看起来很好,我正在测试设备上进行测试:

- (void)viewDidLoad {
    [super viewDidLoad];
    //horizontal scroll view
    HorizScroll *ho = [[HorizScroll alloc] initWithFrame:CGRectMake(0, 0, 500, 100)];
    for ( int i=0; i<3; i++){
        MyView* mv = [[MyView alloc] init];
        [ho addSubview:mv];
    }
    //ho.zoomScale = 0.3f;
    [self.view addSubview:ho];
}





@implementation HorizScroll
- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
    }
    return self;
}

-(void)addSubview:(UIView *)view{
    [super addSubview:view];
    NSUInteger numSubviews = self.subviews.count;
    [view setFrame:CGRectMake(CGRectGetWidth(view.bounds)*(numSubviews),
                             0,
                             CGRectGetWidth(view.bounds),
                             CGRectGetHeight(view.bounds) )];
    [self setContentSize:CGSizeMake(CGRectGetWidth(view.bounds)*(numSubviews),
                                   CGRectGetHeight(view.bounds) )];
}









@implementation MyView
-(int)getRandomNumberBetween:(int)from to:(int)pto {
    return (int)(from + arc4random() % (pto-from+1));
}
-(instancetype)init{
    if ( self = [super init] ){
        CGFloat red = [self getRandomNumberBetween:1 to:255];
        self.backgroundColor = [UIColor colorWithRed:red/256.0
                                               green:[self getRandomNumberBetween:1 to:255]/256.0
                                                blue:[self getRandomNumberBetween:1 to:255]/256.0
                                               alpha:1.0];
    }
    return self;
}

-(instancetype)initWithFrame:(CGRect)frame{
    if ( self = [super initWithFrame:frame] ){
        self.frame = CGRectMake(counterX, 0, 100, 100);
        counterX += 50;
    }
    return self;
}

1 个答案:

答案 0 :(得分:1)

您需要将scrollview的contentSize设置为大于其帧大小。所以在[self.view addSubview:ho]之后添加这一行。

ho.contentSize = CGSizeMake(501.f, 100.f);

或在[self.view addSubview:ho]之前并注释掉该行:

[self setContentSize:CGSizeMake(CGRectGetWidth(view.bounds)*(numSubviews),
                                CGRectGetHeight(view.bounds))];

这是没有必要的,因为您可以在添加所有子视图后进行设置。