0

Я хочу реализовать UIScrollView, где пейджинг включен, и я могу просто пролистать некоторые изображения. Это все, что я хочу сделать сейчас.iphone: UIScrollView пейджинг включен с NO ZOOM и NO PREVIEW

Я сделал это до сих пор в построителе интерфейса: может кто-то помочь?

alt text

я не знаю, как сделать все остальное. Может кто-то, пожалуйста, помогите мне с этим. Мне не нужны функции масштабирования. Мне не нужен предварительный просмотр предыдущего или следующего изображения в scrollview, я просто хочу прокрутить простую прокрутку, которая позволяет пользователю пролистывать изображения.

Вся помощь приветствуется. Если бы вы могли сказать мне шаг за шагом, как я мог бы достичь этого, которое было бы самым ценным. Спасибо.

Я просмотрел примеры кода, и у них слишком много сложностей. Ive посмотрел на несколько и предпочитает учебник с самого начала. thank you

ответ

1

Похоже, вам просто нужно добавить свой контент в качестве подзадачи UIScrollView и добавить распознаватель жестов.

Загрузите изображение в UIImageView. Добавьте UIImageView в качестве подсмотра UIScrollView.

// do this in init or loadView or viewDidLoad, wherever is most appropriate 
// imageView is a retained property 
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]; 
[scrollView addSubview:imageView]; 

Добавить UISwipeGestureRecognizer в UIScrollView.

// probably after the code above 
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:); 
[scrollView addGestureRecognizer:swipe]; 
[swipe release]; 

На обработчике UISwipeGestureRecognizer, изменить загруженное изображение в UIImageView.

- (void)handleSwipe:(UIGestureRecognizer *)swipe { 
    // do what you need to determine the next image 
    imageView.image = [UIImage imageNamed:<your replacement image here>]; 
} 
+0

pseudo code all well and said, есть ли пример учебника, чтобы я мог следовать? или, может быть, вы могли бы написать один ответ, просто скажите шаг за шагом ?. спасибо – Pavan

+0

Образец кода добавлен. У меня нет времени писать полный учебник, но я думаю, что он охватывает то, что вам нужно, за вычетом логики отслеживания изображений. – Altealice

3

может быть, вы хотите взглянуть на мой sample implementation о наличии ViewController, что делает точную это. Я написал эту вещь как ответ this question.
Возможно, это слишком сложно для вас, но это будет нелегко.
И это только базовая версия, которая загружает все изображения в память при запуске. Это не будет работать в реальном приложении. Поэтому вам нужно реализовать некоторые функции UIScrollView-Delegate. И там начинается сложность ...

// ImageViewController.h 
// 
// Created by Matthias Bauch on 12.10.10. 
// Copyright 2010 Matthias Bauch. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

#warning this is just a quick hack, you should not use this if you dont understand this. There might be leaks, bugs and a lot of whatever. 

@interface ImageViewController : UIViewController { 
    NSString *imagePath; 
} 
@property (nonatomic, copy) NSString *imagePath; 
- (id)initWithImageDirectory:(NSString*)imgPath; 
@end 


// 
// ImageViewController.m 
// 
// Created by Matthias Bauch on 12.10.10. 
// Copyright 2010 Matthias Bauch. All rights reserved. 
// 

#import "ImageViewController.h" 


@implementation ImageViewController 
@synthesize imagePath; 

- (id)initWithImageDirectory:(NSString*)imgPath { 
    if (self = [super init]) { 
     imagePath = [imgPath copy]; 
    } 
    return self; 
} 


- (UIView *)viewFullOfImagesAtPath:(NSString *)path withSize:(CGSize)size { 
    NSError *error = nil; 
    NSArray *filenames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; 
    if (!filenames) { 
     NSLog(@"Error accessing files: %@ [%@]", [error localizedDescription], error); 
     return nil; 
    } 
    UIView *aView = [[UIView alloc] init]; 
    CGFloat xOffset = 0; 
    for (NSString *filename in filenames) { 
     NSString *fullPath = [path stringByAppendingPathComponent:filename]; 
     UIImage *image = [[[UIImage alloc] initWithContentsOfFile:fullPath] autorelease]; 
     if (!image) 
      continue; 
     CGRect frameRect = CGRectMake(xOffset, 0, size.width, size.height); 
     UIImageView *imageView = [[[UIImageView alloc] initWithFrame:frameRect] autorelease]; 
     [imageView setImage:image]; 
     imageView.contentMode = UIViewContentModeScaleAspectFit; 
     [aView addSubview:imageView]; 
     xOffset += size.width; 
    } 
    aView.frame = CGRectMake(0, 0, xOffset, size.height); 
    return [aView autorelease]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:self.view.bounds] autorelease]; 
    scrollView.pagingEnabled = YES; 
    UIView *contentView = [self viewFullOfImagesAtPath:imagePath withSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height)]; 
    NSLog(@"%f %f %f %f", contentView.frame.origin.x, contentView.frame.origin.y, contentView.frame.size.width, contentView.frame.size.height); 
    [scrollView addSubview:contentView]; 
    scrollView.contentSize = CGSizeMake(CGRectGetWidth(contentView.frame), CGRectGetHeight(contentView.frame)); 
    [self.view addSubview:scrollView]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Overriden to allow any orientation. 
    return YES; 
} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 


- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [imagePath release]; 
    [super dealloc]; 
} 


@end 
+0

i dont mind complex, то, что я делаю, - это дополнительные функции, которые не нужны, например, масштабирование функций и/или функции предварительного просмотра. я не возражаю, создавая функции делегата, он просто делает вещи чище, но мне просто нужно знать, КАК это делать. – Pavan

+0

, как вы сказали: «Его взломать .... и это не должно использоваться, поскольку оно может содержать много ошибок в утечке и многое другое». Если бы вы могли направить меня к чему-то полезному, это было бы здорово. Я ценю ваше время. спасибо за попытку помочь. – Pavan

+0

Это не должно быть готовым к использованию решением. Это больше похоже на указатель в одном из возможных направлений. –

Смежные вопросы