iphone: пейджинг UIScrollView включен без функции масштабирования и просмотра - PullRequest
0 голосов
/ 13 октября 2010

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

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

alt text

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

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

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

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

может быть, вы захотите взглянуть на мой пример реализации viewcontroller, который точно это делает.Я написал это как ответ на этот вопрос .
Возможно, это слишком сложно для вас, но легче не станет.
И это только базовая версия, которая загружает всеизображения в память при запуске.Это не будет работать в реальном приложении.Поэтому вы должны реализовать некоторые функции 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
1 голос
/ 13 октября 2010

Похоже, вам просто нужно добавить свой контент в качестве подпредставления 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>];
}
...