1

我正在尝试使用 Apple 的文档及其示例代码http://developer.apple.com/iphone/library/samplecode/Scrolling/index.html来学习 UIScrollview,但如此简单的事情却让我无法理解。

你如何知道屏幕上当前是什么图像,所以如果我在水平滚动视图中选择了其中一个图像,我将如何获取图像的文件名,甚至是数组中的指针,然后再做进一步的事情与图像?

我认为启用 Page Control 可能会找到一个页面 # 并将其映射到图像。我考虑过计算减速来计算页数,但是没有足够多的轻弹会增加它并给出一个错误的数字。

我能想到的最后一件事是获取 contentOffSet 并除以图像大小,这将给出 1、2、3 并且我可以指向数组(今晚太累了无法尝试......我想在浪费很多东西之前我可能会问更多时间 ;-) )。

还有其他想法吗?我认为他们在相册应用程序中会使用某种方法。

PS:代码如下:

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [scrollView1 subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;
            
            curXLoc += (kScrollObjWidth);
        }
    }
    
    // set the content size so it can be scrollable
    [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}

- (void)viewDidLoad
{
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

    // 1. setup the scrollview for multiple images and add it to the view controller
    //
    // note: the following can be done in Interface Builder, but we show this in code for clarity
    [scrollView1 setBackgroundColor:[UIColor blackColor]];
    [scrollView1 setCanCancelContentTouches:NO];
    scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scrollView1.clipsToBounds = YES;        // default is NO, we want to restrict drawing within our scrollview
    scrollView1.scrollEnabled = YES;
    
    // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
    // if you want free-flowing scroll, don't set this property.
    scrollView1.pagingEnabled = YES;
    
    // load all the images from our bundle and add them to the scroll view
    //NSUInteger i;
    for (i = 1; i <= kNumImages; i++)
    {
        NSString *imageName = [NSString stringWithFormat:@"Card %d.png", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        
        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = kScrollObjHeight;
        rect.size.width = kScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;  // tag our images for later use when we place them in serial fashion
        [scrollView1 addSubview:imageView];
        [imageView release];
    }
    
    [self layoutScrollImages];  // now place the photos in serial layout within the scrollview
4

1 回答 1

2

睡个好觉后这很容易!

CGPoint p = scrollView1.contentOffset;
NSLog(@"x = %f, y = %f", p.x, p.y);

现在只需除以 320(如果是水平和全屏图像)并加 1(因为它从 0 开始)。

希望这对其他人有帮助!

保罗

于 2009-06-06T21:43:22.097 回答