【问题标题】:Add UIImageView on UIScrollView while UITapGestureRecognizer在 UITapGestureRecognizer 时在 UIScrollView 上添加 UIImageView
【发布时间】:2011-08-09 14:53:28
【问题描述】:

我有 UIViewController 上面有 UIScrollView。 UIScrollView 有各种瓦片图像,如 Apple Developer 瓦片图像层程序。我正在尝试使用 UITapGestureRecognizer 来了解位置并在其上放置一个带有 uiimage 的 uiimageview。但不知何故,它永远不会放置图像文件。

- (void)loadView 
{    
CGRect pagingScrollViewFrame = [self frameForPagingScrollView];
pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
pagingScrollView.pagingEnabled = YES;
pagingScrollView.backgroundColor = [UIColor clearColor];
pagingScrollView.showsVerticalScrollIndicator = NO;
pagingScrollView.showsHorizontalScrollIndicator = NO;
pagingScrollView.userInteractionEnabled = YES;
pagingScrollView.contentSize = [self contentSizeForPagingScrollView];
pagingScrollView.delegate = self;
self.view = pagingScrollView;


UIGestureRecognizer *recognizer;

recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
[pagingScrollView addGestureRecognizer:recognizer];
self.tapRecognizer = (UITapGestureRecognizer *)recognizer;
recognizer.delegate = self;
[recognizer release];

recycledPages = [[NSMutableSet alloc] init];
visiblePages  = [[NSMutableSet alloc] init];
[self tilePages];

[pagingScrollView addSubview:imageView]; /// **** Here I am Adding to ScrollView *****//

}

- (void)showImageWithText:(NSString *)string atPoint:(CGPoint)centerPoint {

imageView.image = [UIImage imageNamed:@"image.png"];
imageView.center = centerPoint;
imageView.alpha = 1.0;  
 }


- (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {

CGPoint location = [recognizer locationInView:pagingScrollView];

int tapX = (int) location.x;
    int tapY = (int) location.y;
    [self showImageWithText:@"tap" atPoint:location];

   }

  //****More Code  Same code like TilingLayer.m from Apple Developer Kit ****//
- (void)tilePages 
 {
  // Calculate which pages are visible
CGRect visibleBounds = pagingScrollView.bounds;
int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / CGRectGetWidth(visibleBounds));
int lastNeededPageIndex  = floorf((CGRectGetMaxX(visibleBounds)-1) / CGRectGetWidth(visibleBounds));
firstNeededPageIndex = MAX(firstNeededPageIndex, 0);
lastNeededPageIndex  = MIN(lastNeededPageIndex, [self imageCount] - 1);

// Recycle no-longer-visible pages 
for (ImageScrollView *page in visiblePages) {
    if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) {
        [recycledPages addObject:page];
        [page removeFromSuperview];
    }
}
[visiblePages minusSet:recycledPages];

// add missing pages
for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) {
    if (![self isDisplayingPageForIndex:index]) {
        ImageScrollView *page = [self dequeueRecycledPage];
        if (page == nil) {
            page = [[[ImageScrollView alloc] init] autorelease];
        }
        [self configurePage:page forIndex:index];
        [pagingScrollView addSubview:page];
        [visiblePages addObject:page];
    }
}    

}

我不确定我在这里做错了什么。如果有人遇到过这样的问题,可以与我分享想法。

【问题讨论】:

  • 你的 showImageWithText 方法被调用了吗? imageView 在哪里创建/定义?
  • 是的。它被调用了,但我想我忘了创建和定义 imageView。
  • 正如 Malaxeur 所说,使用:imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];在将其添加到滚动视图之前。甚至更好地在头文件中定义 UIImageView。
  • 试过它不起作用可能是我必须在它上面添加另一层或其他东西吗?
  • 也许代码正在运行,但图像在其他东西后面?尝试将子视图放在前面:[pagingScrollView bringSubviewToFront: imageView];

标签: iphone objective-c uiscrollview uiimageview uigesturerecognizer


【解决方案1】:

我可能遗漏了一些东西,但你的 imageView 是 nil。

您添加 [pagingScrollView addSubview:imageView] 但此时 imageView 未实例化。

由于您总是分配相同的图像,您应该这样做:

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];

'loadView' 的内部和

[imageView release];
imageView = nil;

'viewDidUnload'内部

【讨论】:

  • 我确实尝试创建 UIImageView 的实例,但没有帮助。我添加了更多代码,希望它更有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多