gpt4 book ai didi

iphone - 在 UIScrollView 中使用 UIImageView 或 UIButton 时出现问题

转载 作者:行者123 更新时间:2023-12-03 21:10:35 25 4
gpt4 key购买 nike

我使用 UIScrollView 来保存大小为 80x80 的不同数量的图像,当用户点击一个图像时,我希望它启动到模态视图中,显示全屏等。我遇到的问题是检测 ScrollView 内图像的触摸。到目前为止我已经尝试了两种方法,但每种方法都有一个问题。我以两种方式发布,但我只需要其中一种的答案。

我有一个图像数组并循环遍历它,这是我尝试为每个图像使用 UIImageView 的第一个方法:

for (i=0; i<[imageArray count]; i++) {
// get the image
UIImage *theImage = [imageArray objectAtIndex:i];

// figure out the size for scaled down version
float aspectRatio = maxImageHeight / theImage.size.height;
float thumbWidth = theImage.size.width * aspectRatio;
float thumbHeight = maxImageHeight;

lastX = lastX+10;

// Scale the image down
UIImage *thisImage = [theImage imageByScalingProportionallyToSize:CGSizeMake(thumbWidth, thumbHeight)];

// Create an 80x80 UIImageView to hold the image, positioned 10px from edge of the previous one
UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(lastX, 10, 80, 80)];
image.clipsToBounds = YES;
image.contentMode = UIViewContentModeTopLeft;
image.image = thisImage;
image.userInteractionEnabled = YES;

// add to the scroller
[photoScroller addSubview:image];

// release
[image release];

// set variables ready for the next one
//lastWidth = thisImage.size.width;
lastWidth = 80; // we're using square images so set to 80 rather than the width of the image
lastX = lastX+lastWidth;
}

这导致的问题是,在这个循环之后,我必须在 UIScrollView 上将 userInteractionEnabled 设置为 NO,这样我就可以覆盖 TouchBegan 并检测触摸,但是这样做当然会禁用滚动,因此用户只能看到前 6 个图像左右.

可以这么说,有什么方法可以重新启用滚动吗? photoScroller.scrollEnabled = YES;由于用户交互已被禁用,因此没有任何效果。

...

我尝试的第二种方法是为每个图像使用 UIButton,本例中循环的代码如下:

for (i=0; i<[imageArray count]; i++) {
// get the image
UIImage *theImage = [imageArray objectAtIndex:i];

// figure out the size for scaled down version
float aspectRatio = maxImageHeight / theImage.size.height;
float thumbWidth = theImage.size.width * aspectRatio;
float thumbHeight = maxImageHeight;

lastX = lastX+10;

// Scale the image down
UIImage *thisImage = [theImage imageByScalingProportionallyToSize:CGSizeMake(thumbWidth, thumbHeight)];

// Create an 80x80 UIButton to hold the image, positioned 10px from the edge of the previous one
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(lastX, 10, 80, 80)];
button.clipsToBounds = YES;
button.contentMode = UIViewContentModeTopLeft;
[button setImage:thisImage forState:UIControlStateNormal];
[button setImage:thisImage forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(tapImage:) forControlEvents:UIControlEventTouchUpInside];

// add to the scroller;
[photoScroller addSubview:button];

// release
[button release];

// set variables ready for the next one
//lastWidth = thisImage.size.width;
lastWidth = 80; // we're using square images so set to 80 rather than the width of the image
lastX = lastX+lastWidth;
}

现在这段代码几乎可以完美运行,唯一的问题是用户只能在触摸空白时才能滚动。

有没有办法让用户在 UIButton 上拖动时它仍然会滚动 UIScrollView?

最佳答案

UIScrollView 有一个名为 delaysContentTouches 的属性。默认情况下,此设置为 YES,这会产生您想要的行为:拖动始终有效,即使您点击 UIButton 等。

所以,如果您没有看到该行为,那么您可能已将 delaysContentTouches 设置为 NO

此外,不要在 ScrollView 中使用 UIImageView 并覆盖它们的 touchedBegan: 和 friend ,它可能更容易简单地使用 UIButton 来代替。

您可以简单地将按钮的图像设置为您想要的任何图像,并且不必对它们进行子类化。只需使用 addTarget: 即可使按钮在单击时对 View Controller 进行回调。 (这与使用 Interface Builder 连接到 IBAction 相同)

关于iphone - 在 UIScrollView 中使用 UIImageView 或 UIButton 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com