UIScrollview 对任何触摸都没有反应?
Posted
技术标签:
【中文标题】UIScrollview 对任何触摸都没有反应?【英文标题】:UIScrollview does not react to any touch? 【发布时间】:2014-12-08 13:57:34 【问题描述】:我正在尝试做一个简单的滚动,但触摸后视图不会移动,我不知道为什么,滚动视图应该处理手势,但可能会丢失一些东西。有人知道在哪里吗?
这里是代码:我创建了一个小的水平滚动视图,里面有一些视图。视图看起来不错,我正在触摸设备上对其进行测试:
- (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;
【问题讨论】:
HorizScroll 是否继承自 UIScrollView? 【参考方案1】:您需要将滚动视图的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))];
这不是必需的,因为您可以在添加所有子视图后设置它。
【讨论】:
非常感谢 gabbler 不过有一个问题,如果我为框架设置一个小的宽度尺寸,为什么它不起作用,并让滚动视图子类中的 setContentSize (这会更大)?然后卷轴没有响应。到目前为止,它只适用于你的技术...... 应该可以了,你可以设置一个断点,在将ho添加为self.view的子视图后,查看最终的contentSize,并与frame进行比较。 请原谅我的知识不足:) 设置断点时,在哪里可以找到有关 frame 和 contentSize 的信息?编辑:如果你指的是 NSLog,结果是:contentSize 300, 100, frame 0, 0, 200, 100
请看here,当scrollview在屏幕上绘制时,会增加两个scroll indicator subview,可以通过将showsHorizontalScrollIndicator
设置为NO
来移除。以上是关于UIScrollview 对任何触摸都没有反应?的主要内容,如果未能解决你的问题,请参考以下文章
分页 UIScrollView 内的 UIScrollView