UIScrollView & UIButtons,真的很奇怪的行为

Posted

技术标签:

【中文标题】UIScrollView & UIButtons,真的很奇怪的行为【英文标题】:UIScrollView & UIButtons, really strange behaviour 【发布时间】:2013-04-28 19:22:18 【问题描述】:

现在我正在实现 UIScrollView,我遇到了一个我从未见过的问题:我的滚动视图上的 3 个 UIButtons 在我的点击时没有响应。 一个有,一个没有。

我做了很多研究,尝试了很多事情(尝试减少延迟,设置用户交互......)

在 viewDidLoad 方法中:

BoutonPig1 = [UIButton buttonWithType:UIButtonTypeCustom];
[BoutonPig1 setFrame:CGRectMake(0, 45, 145, 90)];
[BoutonPig1 addTarget:self action:@selector(BonusShop) forControlEvents:UIControlEventTouchUpInside];
UIImage * boutonPig1OnImage = [UIImage imageNamed:@"Pig2ShopBloquee.png"];
[BoutonPig1 setImage:boutonPig1OnImage forState:UIControlStateNormal];

我的设置滚动视图方法有 3 个元素:

-(void)setScrollView:(UIScrollView *)scroller1

for (int i = 0; i < 3; i++) 

    CGRect frame;
    frame.origin.x = 0;
    frame.origin.y = scroller.frame.size.height * i;
    frame.size = scroller.frame.size;

    UIImageView *newPageView = [[UIImageView alloc] init];
    newPageView.contentMode = UIViewContentModeScaleAspectFit;
    newPageView.frame = frame;

    if (i == 0)
    
        [newPageView addSubview:BoutonPig1];
    
    if (i == 1)
    
        [newPageView addSubview:BoutonPig2];
    
    if (i == 2)
    
        [newPageView addSubview:BoutonPig3];
    
    [newPageView setUserInteractionEnabled:YES];
    [scroller addSubview:newPageView];

scroller.contentSize = CGSizeMake(scroller.frame.size.width * 3, scroller.frame.size.height);

我放在子视图上的三个元素是第一个代码提取中的 3 个 UIButton。做同样的事情。现在唯一不同的是他们的立场。

    [BoutonPig2 setFrame:CGRectMake(0, 164, 145, 90)];
    [BoutonPig3 setFrame:CGRectMake(0, 285, 145, 90)];

感谢您的帮助!

【问题讨论】:

你的 UIScrollView 的框架是什么?我想你的滚动视图的内容大小不够大。 scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(59.0, 54.0, 145, 180)]; 那么答案就出来了,180 + 54 = 234,对于初学者来说,它大于按钮 3 上的 285。调试滚动视图的框架。也不确定为什么需要该图像视图,因为您没有为其设置图像。 但问题是现在我改变了滚动视图的大小,按钮出现在所有屏幕上,而不仅仅是滚动视图:/ 没有图片我不知道怎么做:/ 【参考方案1】:

我认为问题出在坐标上,因为您在 newPageView 上添加了按钮 BoutonPig2 BoutonPig3,坐标为 CGRectMake(0, 164, 145, 90) CGRectMake(0, 285, 145, 90) 但您需要设置 CGRectMake( 0, 45, 145, 90) 或 CGRectMake(0, 0, 145, 90)... 因为您没有在 scool 上添加按钮,而是在 newPageView 上添加按钮,并且您有 0,0 的新坐标

【讨论】:

以上是关于UIScrollView & UIButtons,真的很奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

带有 UIScrollView 的纯自动布局

iOS UIScrollview代理方法

可拖动的 UIView 在添加到 UIScrollView 后停止发布 touchesBegan

iOS - UIScrollView hitTest 不包含触摸

UIScrollView AutoLayout

以编程方式快速创建水平 UIScrollView