我们如何在iOS中水平滑动2个以上的图像?

时间:2013-10-11 06:09:45

标签: iphone ios ios5 ios6

我写下面的代码来滑动2张图片。它工作正常 但现在我的任务是水平滑动2个以上的图像。 如果我们向左滑动,第一张图像应该出现在最后一张图像上

我怎样才能实现这一目标?

-(void)viewDidLoad    
{
  [super viewDidLoad];

  // instantiate gesture recognizer

UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(didSwipe:)];
[imageView addGestureRecognizer:rightSwipe];

UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(didSwipe:)];
leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
[imageView addGestureRecognizer:leftSwipe];

//setup images
image1 = [UIImage imageNamed:@"1.png"];
image2 = [UIImage imageNamed:@"2.png"];
imageView.image = image1;

}

-(void)didSwipe : (UISwipeGestureRecognizer *) sender
 {
UISwipeGestureRecognizerDirection direction = sender.direction;
switch (direction) {
    case UISwipeGestureRecognizerDirectionRight:
        imageView.image = image2;
        break;

    case UISwipeGestureRecognizerDirectionLeft :
        imageView.image = image1;
        break;


    default:
        break;
   }
}

3 个答案:

答案 0 :(得分:0)

使用以下代码,您将获得所需的输出。 在以下代码中,您的应用程序将使用相册照片,并根据相册中的图像数量自动设置滚动的大小。

-(void)getAllPictures
{


    imageArray=[[NSArray alloc] init];
    mutableArray =[[NSMutableArray alloc]init];
    NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init];

    library = [[ALAssetsLibrary alloc] init];

    void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
        if(result != nil) {
            if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
                [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

                NSURL *url= (NSURL*) [[result defaultRepresentation]url]; 

                [library assetForURL:url
                         resultBlock:^(ALAsset *asset) {
                             [mutableArray addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];

                             if ([mutableArray count]==count)
                             {
                                 imageArray=[[NSArray alloc] initWithArray:mutableArray];
                                 [self allPhotosCollected:imageArray];
                             }
                         }
                        failureBlock:^(NSError *error){ NSLog(@"operation was not successfull!"); } ]; 

            } 
        }
    };

    NSMutableArray *assetGroups = [[NSMutableArray alloc] init];

    void (^ assetGroupEnumerator) ( ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop) {
        if(group != nil) {
            [group enumerateAssetsUsingBlock:assetEnumerator];
            [assetGroups addObject:group];
            count=[group numberOfAssets];
        }
    };

    assetGroups = [[NSMutableArray alloc] init];

    [library enumerateGroupsWithTypes:ALAssetsGroupAll
                           usingBlock:assetGroupEnumerator
                         failureBlock:^(NSError *error) {NSLog(@"There is an error");}];
}



-(void)allPhotosCollected:(NSArray*)imgArray
{


    CGSize imageSize;

    imageSize.width= imageView.bounds.size.width;
    imageSize.height = imageView.bounds.size.height;
    self.scrollView=[[UIScrollView alloc]init];
    self.scrollView.frame = imageView.frame;
    self.scrollView.contentSize = CGSizeMake(imageSize.width * imgArray.count, imageSize.height);
    self.scrollView.pagingEnabled = YES;
    self.scrollView.bounces=YES;
    self.scrollView.scrollEnabled = YES;
    self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin;
    [self.scrollView flashScrollIndicators];
    [self.view addSubview:self.scrollView];

    CGFloat xPos = 0.0;

    for (UIImage *image in imgArray) {
            imageView = [[UIImageView alloc] initWithImage:image];
            imageView.frame = CGRectMake(xPos, 0.0, imageSize.width, imageSize.height);


         [self.scrollView addSubview:imageView];

        xPos += imageSize.width;
        // assuming ARC, otherwise release imageView

    }



}


#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 20,320 , 420)];
    [self getAllPictures];
}

答案 1 :(得分:0)

将多个图像存储在NSArray中。

现在检查条件是否向右滑动,如果是,则显示该阵列中的图像。

如果向左滑动则显示该阵列中的上一张图像..

易于用于循环和增量运算符。

我希望你会明白。

答案 2 :(得分:0)

查看此link,其苹果示例代码,用于使用滑动手势滚动。