简体   繁体   English

iPhone显示照片/图像滑动(如照片库和Facebook应用程序)?

[英]iPhone show photos/images sliding (like photo library and Facebook app)?

I started developing to iOS just a couple of days ago, so everything is very new to me! 我几天前就开始开发iOS了,所以一切对我来说都是新的! I need to show in an application a "photo slider" as we've in the iPhone library or Facebook application. 我需要在应用程序中显示“照片滑块”,就像我们在iPhone库或Facebook应用程序中一样。 After some research, I reached a dead end. 经过一番研究,我走到了尽头。 My goal is to show a set of photos, one by one, and having the user slide the finger from right to left, or vice versa :-) 我的目标是逐个显示一组照片,并让用户从右向左滑动手指,反之亦然:-)

Does anyone has an example or knows of one? 有没有人有一个例子或知道一个?

Thanks to all. 谢谢大家。

Well Three20 is famous but I would discourage you from using it. Well Three20很有名,但我不鼓励你使用它。 If all you need is a photo slider then putting the entire Three20 framework into your project and trying to figure out how the URL-based navigation thing works can be a real pain. 如果您只需要一个照片滑块,那么将整个Three20框架放入您的项目中,并尝试弄清楚基于URL的导航工作如何工作可能是一个真正的痛苦。

Here is a better alternative, https://github.com/enormego/PhotoViewer . 这是一个更好的选择, https://github.com/enormego/PhotoViewer It's a standalone implementation of the photo slider and a corresponding image cache. 它是照片滑块和相应图像缓存的独立实现。 You can read more about how the code works on the author's blog, http://developers.enormego.com/ . 您可以在作者的博客http://developers.enormego.com/上阅读有关代码如何工作的更多信息。

you can use below sample code for image slideshow..Here 'scr' is the scrollview object. 您可以使用下面的示例代码进行图像幻灯片放映。这里的'scr'是scrollview对象。

NSMutableArray *imgs=[[NSMutableArray  alloc]init]; 
                         // arrayWithObjects:[UIImage @"abc1.jpg"],[UIImage @"abc2.jpg"],[UIImage @"abc3.jpg"], [UIImage@"abc4.jpg"],
//                [ UIImage @"abc5.jpg"],nil];

                      [imgs addObject:[UIImage imageNamed:@"abc1.jpg"]];
                      [imgs addObject:[UIImage imageNamed:@"abc2.jpg"]];
                       [imgs addObject:[UIImage imageNamed:@"abc3.jpg"]];
                        [imgs addObject:[UIImage imageNamed:@"abc4.jpg"]];
                         [imgs addObject:[UIImage imageNamed:@"abc5.jpg"]];
for(int i=0;i<imgs.count;i++)
{
    CGRect frame;
    frame.origin.x=self.scr.frame.size.width *i;
    frame.origin.y=0;
    frame.size=self.scr.frame.size;
    UIImageView *subimg=[[UIImageView alloc]initWithFrame:frame];
    subimg.image=[imgs objectAtIndex:i];
    [self.scr  addSubview:subimg];
    [subimg release];
    self.scr.contentSize=CGSizeMake(self.scr.frame.size.width*imgs.count, self.scr.frame.size.height);

}

Building on yhpets response, this supports orientation changes too by applying tags to each ImageView and using them to reference each ImageView and resize when the device is rotated... 在yhpets响应的基础上,通过将标签应用于每个ImageView并使用它们引用每个ImageView并在设备旋转时调整大小来支持方向更改...

In your ViewController.h file you'll need to set up your Array and ScrollView... 在ViewController.h文件中,您需要设置Array和ScrollView ...

@interface ViewController : UIViewController{
    NSMutableArray *imgs;
    IBOutlet UIScrollView *scr;
}
@property (strong, nonatomic) IBOutlet UIScrollView *scr;

And in your ViewController.m you need to listen for didRotateFromInterfaceOrientation and resize the ImageViews to fit the new screen. 在ViewController.m中,您需要侦听didRotateFromInterfaceOrientation并调整ImageViews的大小以适应新屏幕。 We need to set the screenWidth and screenHeight variables depending on if we are portrait or landscape and use these to resize each imageview and the scrollview. 我们需要设置screenWidth和screenHeight变量,具体取决于我们是纵向还是横向,并使用它们来调整每个imageview和scrollview的大小。

@implementation ViewController
@synthesize scr;

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
        CGRect screenRect = [[UIScreen mainScreen] bounds];
        CGFloat screenWidth = screenRect.size.width;
        CGFloat screenHeight = screenRect.size.height;
    if ((self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)||(self.interfaceOrientation == UIInterfaceOrientationPortrait)){
//screenWidth and screenHeight are correctly assigned to the actual width and height
    }else{
        screenHeight = screenRect.size.width;
        screenWidth = screenRect.size.height;
        screenRect.size.width = screenWidth;
        screenRect.size.height = screenHeight;
    }
    NSLog(@"see it's right now= (%f,%f)",screenWidth,screenHeight);
    self.scr.contentSize=CGSizeMake(screenWidth*imgs.count, screenHeight);
    for(int i=0;i<imgs.count;i++){
        UIImageView *targetIV = (UIImageView*)[self.view viewWithTag:(i+1)];
        CGRect frame;
        frame.origin.x=screenWidth *i;
        frame.origin.y=0;
        frame.size=CGSizeMake(screenWidth, screenHeight);
        targetIV.frame = frame;
    }
}///////////////////////////////////////////////////////////////////////////
- (void)viewDidLoad{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    imgs=[[NSMutableArray  alloc]init];
    [imgs addObject:[UIImage imageNamed:@"1001.png"]];
    [imgs addObject:[UIImage imageNamed:@"1002.png"]];
    [imgs addObject:[UIImage imageNamed:@"1003.png"]];
    [imgs addObject:[UIImage imageNamed:@"1004.png"]];
    for(int i=0;i<imgs.count;i++){
        CGRect frame;
        frame.origin.x=self.scr.frame.size.width *i;
        frame.origin.y=0;
        frame.size=self.scr.frame.size;
        UIImageView *subimg=[[UIImageView alloc]initWithFrame:frame];
        subimg.image=[imgs objectAtIndex:i];
        subimg.tag = (i+1);
        subimg.contentMode = UIViewContentModeScaleAspectFit;
        [self.scr  addSubview:subimg];
    }
    self.scr.contentSize=CGSizeMake(self.scr.frame.size.width*imgs.count, self.scr.frame.size.height);
}

如果要查看它,可以在Three20中找到“照片滑块” - https://github.com/facebook/three20/tree/master/samples/TTCatalog - 只需下载源代码并构建TTCatalog

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM