2009-05-14 19 views

cevap

17

İlk olarak, eşit veya UIScrollView çerçevesinin genişliğinden daha az olan bir genişliğe sahip olacak şekilde UIScrollView en "contentSize" olarak ayarlayın.

Sonraki, UIScrollView'un "alwaysBounceHorizontal" değerini NO olarak ayarlayın. Bu, görüntülenecek daha fazla yatay içeriğin olmadığını söylemiş olsanız bile kaydırma görünümünü "lastik bantlama" dan engeller.

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

Kaydırma görünümünde aslında ne olduğu önemli değil.

+0

Bu, Xcode 7'de bile bana yardımcı oldu. Yön kilidinin çalışması için storyboarddaki zıplamayı kapatmak zorunda kaldım (yön kilidi etkinleştirilmiş olsa bile). –

2

UIScrollView alt sınıflarını ve touchesBegan:withEvent: yöntemini, touchesMoved:withEvent: yöntemini ve touchesEnded:withEvent: yöntemini geçersiz kılacaksınız.

Sen gerçekleşti dokunmatik olayın ne tür hesaplamak için, bir dokunuş başlama ve bitiş noktaları yanı sıra bu yöntemleri, kullanacağız: bu basit bir musluk veya yatay veya dikey kaydırma oldu?

Yatay bir kaydırma ise, dokunma olayını iptal edersiniz.

Başlama şeklinizi öğrenmek için source code here'a bakın.

+0

El ile iptal etmek yerine kendinizin dokunuşunu düşünmek niyetinizi kaydırma görünümünü bildirmek daha iyi. Yaklaşımınızla, yatay olarak sürüklemeye başlarsanız (kaza ile bile olsa), dikey olarak sürükleyemezsiniz ve çalışmasını sağlayabilirsiniz. –

+0

Birinin bunu söyleyeceğinden korktum ... Bir ekseni kilitlemek için kesin bir yol eminim, ama sanırım bunu yapmak için daha sakin bir yol aramaya devam edeceğim. Cevabınız için teşekkürler. Nick Farina, önerimi şu şekilde önererek çözdü: İlk olarak, UIScrollView'un "contentSize" öğesini UIScrollView çerçevesinin genişliğine eşit veya daha küçük bir genişliğe sahip olacak şekilde ayarlayın. Sonraki, UIScrollView'ın "alwaysBounceHorizontal" değerini NO olarak ayarlayın. Bu, görüntülenecek daha fazla yatay içeriğin olmadığını söylemiş olsanız bile kaydırma görünümünü "lastik bantlama" dan engeller. – 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