iPhone показывает скольжение фотографий / изображений (например, фото-библиотека и приложение Facebook)? - PullRequest
3 голосов
/ 24 января 2011

Я начал разработку для iOS всего пару дней назад, так что все для меня очень ново! Мне нужно показать в приложении «слайдер фотографий», как в библиотеке iPhone или в приложении Facebook. После некоторых исследований я зашел в тупик. Моя цель - показать набор фотографий, один за другим, чтобы пользователь провел пальцем справа налево или наоборот: -)

Кто-нибудь есть пример или знает один?

Спасибо всем.

Ответы [ 4 ]

7 голосов
/ 24 января 2011

Хорошо, Three20 известен, но я бы не рекомендовал вам его использовать.Если все, что вам нужно, это слайдер фотографий, то вставка всей платформы Three20 в ваш проект и попытка выяснить, как работает навигация на основе URL, могут быть настоящей болью.*https://github.com/enormego/PhotoViewer. Это отдельная реализация слайдера фотографий и соответствующего кеша изображений.Подробнее о том, как работает код, можно узнать в блоге автора, http://developers.enormego.com/.

5 голосов
/ 02 апреля 2012

Вы можете использовать приведенный ниже пример кода для слайд-шоу изображений. Здесь 'scr' является объектом прокрутки.

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);

}
1 голос
/ 16 апреля 2013

Опираясь на ответ yhpets, он также поддерживает изменения ориентации, применяя теги к каждому ImageView и используя их для ссылки на каждый ImageView и изменения размера при повороте устройства ...

В вашем файле ViewController.h вам нужно настроить Array и ScrollView ...

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

И в вашем ViewController.m вам нужно прослушать didRotateFromInterfaceOrientation и изменить размеры ImageViews, чтобы соответствовать новому экрану. Нам нужно установить переменные screenWidth и screenHeight в зависимости от того, портретный или альбомный, и использовать их для изменения размера каждого изображения и вида прокрутки.

@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);
}
0 голосов
/ 24 января 2011

В Three20 есть «слайдер фотографий», если вы хотите его проверить - https://github.com/facebook/three20/tree/master/samples/TTCatalog - просто скачайте исходный код и соберите TTCatalog

...