Tengo un UIScrollView
con un UIView
dentro. Quiero bloquear el eje x para que la vista solo se desplace verticalmente. ¿Cómo habilito el bloqueo direccional?¿Cómo habilito el bloqueo direccional para un UIScrollView?
Respuesta
Primero, configure "contentSize" de UIScrollView para que tenga un ancho que sea igual o menor que el ancho del marco de UIScrollView.
A continuación, establezca "alwaysBounceHorizontal" de UIScrollView en NO. Esto evitará que la vista de desplazamiento tenga "bandas de goma" aunque ya haya dicho que no hay más contenido horizontal para mostrar.
UIScrollView *scrollView;
CGSize size = scrollView.contentSize;
size.width = CGRectGetWidth(scrollView.frame);
scrollView.contentSize = size;
scrollView.alwaysBounceHorizontal = NO;
No importa qué hay realmente dentro de la vista de desplazamiento.
Subcribirá UIScrollView
y reemplazará el método touchesBegan:withEvent:
, el método touchesMoved:withEvent:
y el método touchesEnded:withEvent:
.
Utilizará esos métodos, junto con los puntos inicial y final de un toque, para calcular qué tipo de evento táctil tuvo lugar: ¿se trató de un simple toque o de un deslizamiento horizontal o vertical?
Si se trata de un deslizamiento horizontal, se cancela el evento táctil.
Eche un vistazo a source code here para saber cómo puede comenzar.
Mejor informar la vista de desplazamiento de su intento Creo que en lugar de cancelar manualmente toca. Con su enfoque, si comienza a arrastrar horizontalmente (aunque sea por accidente), no puede arrastrar verticalmente y hacer que funcione. –
Temía que alguien dijera esto ... Una forma segura de bloquear un eje, estoy seguro, pero creo que seguiré buscando una forma más perezosa de hacerlo. Gracias de todos modos por tu respuesta. Nick Farina resolvió mi problema sugiriendo a: Primero, configure "contentSize" de UIScrollView para que tenga un ancho que sea igual o menor que el ancho del marco de UIScrollView. A continuación, establezca "alwaysBounceHorizontal" de UIScrollView en NO. Esto evitará que la vista de desplazamiento tenga "bandas de goma" aunque ya haya dicho que no hay más contenido horizontal para mostrar. – 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. ¿Cómo habilito el complemento MercurialEclipse para un proyecto?
- 2. ¿Cómo puedo anidar un UIScrollView dentro de UIScrollView para que el usuario pueda desplazar el UIScrollView interno?
- 3. ¿Cómo habilito php para trabajar con postgresql?
- 4. ¿Cómo crear un UIScrollView programáticamente?
- 5. ¿Cómo habilito PDO usando CentOS?
- 6. Cómo convertir los ángulos de Euler al vector direccional?
- 7. ¿Cómo habilito la cadena de identificación para repositorios Git?
- 8. ¿Cómo configuro el fondo de UIScrollView para que sea transparente?
- 9. Loop un UIScrollView
- 10. ¿Cómo siempre se puede desplazar un UIScrollView?
- 11. ¿Cómo habilito Speedbar para visualizar todos los tipos de archivos?
- 12. Cómo desplazar automáticamente UIScrollView usando el temporizador
- 13. ¿Cómo habilito MSDTC en SQL Server?
- 14. ¿Cómo reinicio después de un zoom UIScrollView?
- 15. ¿Cómo fuerza forzosamente un pergamino mediante UIScrollView?
- 16. ¿Cómo habilito deshacer en el editor de eclipse ant?
- 17. Cómo calcular el destino de un contentOffset UIScrollView en movimiento
- 18. Cómo incrustar un UITableView en una UIScrollView
- 19. ¿Acortar el retraso táctil en un UIScrollView?
- 20. Cómo evitar el acercamiento manual en un UIScrollView
- 21. Cómo cancelar el desplazamiento en UIScrollView
- 22. ¿Cómo funciona el bloqueo RescueTimes?
- 23. ¿Cómo hago zoom programáticamente un UIScrollView?
- 24. ¿Cómo puse viewController en un UIScrollView
- 25. NSKeyedUnarchiver: cómo evitar un bloqueo
- 26. ¿Cómo habilito los pliegues automáticos en Vim?
- 27. ¿Cómo habilito el acceso externo al servidor MySQL?
- 28. ¿Cómo puedo usar UIScrollView?
- 29. Animación dentro de un UIScrollView
- 30. Uiscrollview con UIButtons: ¿cómo recrear el trampolín?
Esto me ayudó incluso en Xcode 7. Tuve que desactivar el rebote en el guión gráfico para que el bloqueo de dirección funcionara (aunque ya tenía el bloqueo de dirección activado). –