Ho un UIScrollView
con un UIView
all'interno. Voglio bloccare l'asse x in modo che la vista venga fatta scorrere solo verticalmente. Come abilito il blocco direzionale?Come abilitare il blocco di direzione per un UIScrollView?
risposta
Innanzitutto, impostare "contentSize" di UIScrollView in modo che abbia una larghezza uguale o inferiore alla larghezza della cornice di UIScrollView.
Successivamente, impostare "AlwaysBounceHorizontal" di UIScrollView su NO. Ciò impedirà la visualizzazione di scorrimento da "rubber banding" anche se hai detto che non c'è più contenuto orizzontale da visualizzare.
UIScrollView *scrollView;
CGSize size = scrollView.contentSize;
size.width = CGRectGetWidth(scrollView.frame);
scrollView.contentSize = size;
scrollView.alwaysBounceHorizontal = NO;
Non importa ciò che è effettivamente all'interno della vista di scorrimento.
La sottoclasse è UIScrollView
e sostituisce il metodo touchesBegan:withEvent:
, il metodo touchesMoved:withEvent:
e il metodo touchesEnded:withEvent:
.
Utilizzerai questi metodi, insieme ai punti di inizio e fine di un tocco, per calcolare quale tipo di evento di tocco ha avuto luogo: è stato un semplice tocco o uno scorrimento orizzontale o verticale?
Se si esegue uno scorrimento orizzontale, si annulla l'evento tocco.
Dai uno sguardo allo source code here per scoprire come iniziare.
Meglio informare lo scrollview del tuo intento, penso che invece di annullare manualmente tocca te stesso. Con il tuo approccio, se inizi a trascinare orizzontalmente (anche se per sbaglio), non puoi trascinare verticalmente e farlo funzionare. –
Avevo paura che qualcuno lo dicesse ... Un modo sicuro per bloccare un asse sono sicuro, ma penso che continuerò a cercare un modo più pigro per farlo. Grazie per la tua risposta però. Nick Farina ha risolto il mio problema suggerendo di: Innanzitutto, imposta "contentSize" di UIScrollView in modo che abbia una larghezza uguale o inferiore alla larghezza del frame di UIScrollView. Quindi, impostare "AlwaysBounceHorizontal" di UIScrollView su NO. Ciò impedirà la visualizzazione di scorrimento da "rubber banding" anche se hai detto che non c'è più contenuto orizzontale da visualizzare. – RexOnRoids
#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
- 1. Controllare la direzione di scorrimento in UIScrollView
- 2. Come impedire a MPMusicPlayerController di abilitare il blocco dello schermo
- 3. UIScrollView determinare la direzione di scorrimento sul scrollViewDidEndDragging quando paging
- 4. Rileva la direzione di UIScrollView scorri in scrollViewWillBeginDragging
- 5. UIScrollView che scorre in una sola direzione alla volta
- 6. UIScrollView all'interno di UIScrollView?
- 7. ridimensionamento di un UIScrollView con il blocco di animazioni si sposta origine
- 8. Aggiunta di UIScrollView a un UIViewController
- 9. Come abilitare ARC per un singolo file
- 10. Questi valori per le funzioni di direzione
- 11. Come rendere scorrevole un UIScrollView?
- 12. Come posso abilitare lo zoom su UIWebView che all'interno di UIScrollView?
- 13. Calcolo minimumZoomScale di un UIScrollView
- 14. WPF: come scrivere il testo in una direzione diversa?
- 15. Come abilitare il blocco automatico dell'iPhone durante la riproduzione di MPMoviePlayer?
- 16. Il modo migliore per aggiornare/ricaricare UIScrollView
- 17. Come incorporare un UITableView in un UIScrollView
- 18. Abbreviare il ritardo tocco in un UIScrollView?
- 19. Applicare un commit blocco per blocco
- 20. Loop un UIScrollView
- 21. Direzione per l'impostazione di violinista e Bluestacks
- 22. Come abilitare il trascinamento all'interno di JList
- 23. UIScrollView su tvOS
- 24. Direzione Vector Per rotazione Matrix
- 25. Come centrare il contenuto in un UIScrollView con contentOffset
- 26. Come creare un'immagine da un UIView/UIScrollView
- 27. Determinazione della direzione verticale di un touchmode
- 28. Limite di bounce per UIScrollview in iOS
- 29. Ottenere il rettangolo visibile del contenuto di un UIScrollView
- 30. Invertire la direzione di un LinearLayout
Questo mi ha aiutato anche in Xcode 7. Ho dovuto disattivare il bounce nello storyboard per far funzionare il blocco della direzione (anche se avevo già attivato il blocco della direzione). –