Frage

Ich möchte eine UIScrollView implementieren, wo Paging aktiviert ist, und ich kann nur durch einige Bilder blättern. Das ist alles, möchte ich in der Lage sein, jetzt zu tun.

Ich habe diese bisher in Interface Builder getan: kann jemand helfen

alt text

Ich weiß nicht, wie man den Rest zu tun. Kann jemand mir helfen, mit dieser Bitte. Ich habe nicht jede Zoom-Funktionalität benötigen. Ich habe nicht jede Vorschau des vorherigen oder nächsten Bild wollen innerhalb der Scrollview, ich möchte nur eine einfache Paging-Scroll-Ansicht aktiviert, die einen Benutzer zu blättern Sie durch Bilder ermöglicht.

Alle Hilfe ist willkommen. Wenn Sie sagen könnte, mich Schritt für Schritt, wie ich dies erreichen könnte, die am meisten geschätzt werden würde. danke.

Ich habe an Codebeispielen sah, und sie haben einfach zu viel Komplexität geht. Ive an mehrere sah und ein Tutorial von Anfang an bevorzugen. danke

War es hilfreich?

Lösung

Sounds wie Sie gerade benötigen, um Ihre Inhalte als Subview der UIScrollView hinzuzufügen und eine Gestenerkenner hinzuzufügen.

Legen Sie das Bild in ein UIImageView. Fügen Sie die UIImageView als Subview des 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];

Fügen Sie einen UISwipeGestureRecognizer zum UIScrollView.

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

Auf dem UISwipeGestureRecognizer Handler, ändern Sie das geladene Bild in der UIImageView.

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

Andere Tipps

Vielleicht möchten Sie einen Blick nehmen an meinem Beispielimplementierung eines Viewcontroller, die genau dies tut. Ich schrieb diese Sache als Antwort auf diese Frage .
Vielleicht ist dies für Sie zu kompliziert, aber es wird nicht einfacher.
Und dies ist nur die Basisversion, die alle Bilder in dem Speicher beim Start geladen wird. Dies wird nicht in einer realen Anwendung arbeiten. So müssen Sie einige UIScrollView-Delegierten Funktionen implementieren. Und da die Komplexität beginnt ...

//  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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top