2009-05-14 23 views

Odpowiedz

17

Najpierw ustaw "contentSize" UIScrollView na szerokość równą lub mniejszą niż szerokość ramki UIScrollView.

Następnie ustaw parametr "alwaysBounceHorizontal" interfejsu UIScrollView na NIE. Zapobiega to przewijaniu widoku z "gumki", nawet jeśli powiedziałeś mu, że nie ma już poziomej zawartości do wyświetlenia.

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

Nie ma znaczenia, co faktycznie znajduje się w widoku przewijania.

+0

Pomogło mi to nawet w Xcode 7. Musiałem wyłączyć odbicie w serii ujęć, aby blokada kierunku zadziałała (mimo że włączono blokadę kierunkową już włączoną). –

2

Będziesz podklasy UIScrollView i przesłonięcie metody touchesBegan:withEvent:, touchesMoved:withEvent: i touchesEnded:withEvent:.

Użyjesz tych metod wraz z punktami początkowym i końcowym dotyku, aby obliczyć rodzaj zdarzenia dotyku: czy było to proste dotknięcie, czy przesunięcie w poziomie lub w pionie?

Jeśli jest to przesunięcie w poziomie, anulujesz zdarzenie dotykowe.

Proszę spojrzeć na source code here, aby dowiedzieć się, jak zacząć.

+0

Lepiej poinformować o przewijaniu intencji Myślę, że zamiast ręcznie anulować dotyka siebie. Z twoim podejściem, jeśli zaczniesz przeciągać poziomo (nawet jeśli przez przypadek), nie możesz przeciągnąć pionowo i sprawić, by działało. –

+0

Obawiałem się, że ktoś to powie ... Pewny sposób unieruchomienia osi jestem pewien, ale myślę, że będę szukał łatwiejszego sposobu, aby to zrobić. Dziękuję za odpowiedź. Nick Farina rozwiązał mój problem, sugerując: Najpierw ustaw "contentSize" UIScrollView na szerokość równą lub mniejszą niż szerokość ramki UIScrollView. Następnie ustaw "alwaysBounceHorizontal" UIScrollView na NO. Zapobiega to przewijaniu widoku z "gumki", nawet jeśli powiedziałeś mu, że nie ma już poziomej zawartości do wyświetlenia. – RexOnRoids

0
#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