尝试使用UIScrollView显示图像

时间:2012-02-08 20:06:44

标签: objective-c ios ios5

我想创建一个简单的应用程序,它将在第一个开始屏幕上包含一个居中的图像,而不是在滑动手势(右,左)更改图像时。

我对此很新,所以这就是我正在寻找的http://idevzilla.com/2010/09/16/uiscrollview-a-really-simple-tutorial/

这是我在控制器实现中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];

        [myDictionary setObject:@"img1.jpg" forKey:@"http://www.testweb.com"];
        [myDictionary setObject:@"img2.jpg" forKey:@"http://www.test2.com"];

        UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        scroll.pagingEnabled = YES;
        NSInteger numberOfViews = [myDictionary count];

        for (NSString* key in myDictionary) {

                UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:[myDictionary objectForKey:key]]];
                CGRect rect = CGRectMake(10.0f, 90.0f, image.size.width, image.size.height);

                UIImageView * imageView = [[UIImageView alloc] initWithFrame:rect];

                [imageView setImage:image];

                CGPoint superCenter = CGPointMake([self.view bounds].size.width / 2.0, [self.view bounds].size.height / 2.0);

                [imageView setCenter:superCenter];
                self.view.backgroundColor = [UIColor whiteColor];

                [scroll addSubview:imageView];


        }
        scroll.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);


        [self.view addSubview:scroll];

}

我的第一个问题是,我的初始屏幕上显示img2而不是img1。第二个问题是当我向右滑动时,我得到白色屏幕并且没有图像。有什么建议我错过了,我可以尝试/阅读等等?

编辑:

我希望以“最轻”的方式做到这一点,不使用花哨的画廊api等。只需在屏幕上显示几个非常小的图像(即200x200像素),我可以来回滑动(应该'太难了。在学习一门新语言时,一切都很难。

3 个答案:

答案 0 :(得分:0)

github MWPhotoBrowser上有一个项目允许您输入一组一次查看的图像。然后,您可以使用滑动手势从一个图像滚动到下一个图像。添加功能也很容易,它应该让您很好地理解这是如何完成的。还有Apple PhotoScroller example,它为您提供了如何执行相同操作的直接代码,并且还可以平铺图像。由于您不熟悉iOS,因此您可能需要先查看这两个示例,或者只是将它们用作照片查看器。

答案 1 :(得分:0)

您的问题很可能是因为您为两个图片视图设置了CGRect rect = CGRectMake(10.0f, 90.0f, image.size.width, image.size.height);。这意味着UIImageView个对象的两个放置在完全相同的位置(两者都位于滚动视图的x坐标上的10.f处)。当最后添加第二个图像视图时,它覆盖了第一个图像视图,意味着它右侧有空白区域。

为了解决这个问题,你可以试试像......

- (void)viewDidLoad
{
    //your setup code

    float xPosition = 10.f;
    for (NSString* key in myDictionary) {
        UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:[myDictionary objectForKey:key]]];
        CGRect rect = CGRectMake(xPosition, 90.0f, image.size.width, image.size.height);
        xPosition += image.size.width;
        //rest of your code...
    }
    //rest of your code
}

以上意味着第二个视图位于第一个图像的宽度为10 +的x坐标上。请注意,我没有测试我的答案。

答案 2 :(得分:0)

首先将图像放在彼此的顶部。

CGPoint superCenter = CGPointMake([self.view bounds].size.width / 2.0, [self.view bounds].size.height / 2.0);
[imageView setCenter:superCenter];

此处您将两个图像都设置在屏幕中央。第二件事是你使用NSDictionary并循环键。 NSDictionary不是像数组那样的命令。您必须按特定顺序将密钥排序给我们。所以Barjavel做对了,但跳过了将图像设置为中心的事实。试试这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray *myArray = [[NSArray alloc] initWithObjects:@"img1.jpg", @:image2.jpg", nil];
    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    scroll.pagingEnabled = YES;
    NSInteger numberOfViews = [myArray count];
    int xPosition = 0;
    for (NSString* image in myArray) {
        UIImage * image = [UIImage imageNamed:image];
        CGRect rect = CGRectMake(xPosition, 90.0f, image.size.width, image.size.height);

        UIImageView * imageView = [[UIImageView alloc] initWithFrame:rect];
        [imageView setImage:image];
        self.view.backgroundColor = [UIColor whiteColor];
        [scroll addSubview:imageView];
        xPosition += image.size.width;
    }
    scroll.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);

    [self.view addSubview:scroll];

}