Frage

Ich habe eine UIScrollView mit einem UIView innen. Ich mag die x-Achse sperren, so dass die Sicht nur vertikal gescrollt wird. Wie kann ich Richtungssperre aktivieren?

War es hilfreich?

Lösung

zuerst das UIScrollView des contentSize eine Breite zu haben, die gleich oder kleiner als die Breite des UIScrollView des Rahmens.

Als nächstes stellen UIScrollView's alwaysBounceHorizontal auf NO. Dies wird die Scroll-Ansicht von „Gummiband“ verhindern, auch wenn Sie ihm dort gesagt haben, ist nicht mehr horizontal Inhalt angezeigt werden soll.

UIScrollView *scrollView;
CGSize size = scrollView.contentSize;
size.width = CGRectGetWidth(scrollView.frame);
scrollView.contentSize = size;
scrollView.alwaysBounceHorizontal = NO;

Es ist egal, was tatsächlich in der Scroll-Ansicht ist.

Andere Tipps

Sie finden werden Subklassen UIScrollView und das Überschreiben der touchesBegan:withEvent: Methode, touchesMoved:withEvent: Verfahren und die touchesEnded:withEvent: Methode.

Sie werden diese Methoden verwenden, zusammen mit den Start- und Endpunkten einer Berührung zu berechnen, welche Art von Berührungsereignis stattfand: es ist ein einfaches Tippen oder ein horizontaler oder vertikaler Swipe?

Wenn es ein horizontal Swipe ist, Sie kündigen das Touch-Ereignis.

Werfen Sie einen Blick auf die Quellcode hier zu lernen, wie Sie könnten beginnen.

#import <UIKit/UIKit.h>


@interface DemoButtonViewController : UIViewController <UIScrollViewDelegate>

@property (nonatomic, strong) UIScrollView *filterTypeScrollView;
@property (nonatomic, strong) UIBarButtonItem *lockButton;

- (void)lockFilterScroll:(id)sender;

@end

#import "DemoButtonViewController.h"

@implementation DemoButtonViewController

@synthesize filterTypeScrollView;
@synthesize lockButton;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) 
    {
        // Custom initialization
    }
    return self;
}

- (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)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor darkGrayColor];
    self.filterTypeScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 130, self.view.frame.size.width, 320)];
    filterTypeScrollView.contentSize = CGSizeMake(self.view.frame.size.width*4, 320);
    filterTypeScrollView.pagingEnabled = YES;
    filterTypeScrollView.delegate = self;
    [self.view addSubview:filterTypeScrollView];

    UIToolbar *lockbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 450, self.view.frame.size.width, 30)];
    lockbar.barStyle = UIBarStyleBlackTranslucent;
    self.lockButton = [[UIBarButtonItem alloc] initWithTitle:@"Lock Filter Scroll" style:UIBarButtonItemStylePlain target:self action:@selector(lockFilterScroll:)];
    [lockbar setItems:[NSArray arrayWithObjects:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],lockButton,nil]]; 
    [self.view addSubview:lockbar];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations  
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)lockFilterScroll:(id)sender
{
    filterTypeScrollView.scrollEnabled = !filterTypeScrollView.scrollEnabled;

    if (filterTypeScrollView.scrollEnabled) 
    {
        [lockButton setTitle:@"Lock Filter Scroll"];
    } 
    else {
        [lockButton setTitle:@"Unlock Filter Scroll"];
    }
}

@end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top