Mam UIScrollView
z wewnątrz UIView
. Chcę zablokować oś X, aby widok był przewijany tylko pionowo. Jak włączyć blokowanie kierunkowe?Jak włączyć blokadę kierunku dla UIScrollView?
Odpowiedz
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.
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ąć.
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. –
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
#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. Jak włączyć blokadę orientacji w systemie Android?
- 2. Jak włączyć automatyczną blokadę iPhone podczas odtwarzania MPMoviePlayer?
- 3. Jak włączyć powiększanie w interfejsie UIWebView w programie UIScrollView?
- 4. Jak wyłączyć blokadę tekstu?
- 5. Programowo wyłącz blokadę caps
- 6. UIScrollView inside UIScrollView
- 7. jak włączyć sqlite3 dla php?
- 8. Jak włączyć curl dla php
- 9. UIScrollView inside of UIScrollView?
- 10. Jak parametryzować w kierunku iteratora?
- 11. Wyłącz blokadę ekranu
- 12. Jak programowo utworzyć UIScrollView?
- 13. Jak włączyć kompresję gzip dla strony symfony2?
- 14. Jak włączyć SSL dla samodzielnej aplikacji Sinatra?
- 15. Jak włączyć niestandardowe domeny dla moich użytkowników?
- 16. Android - Jak włączyć CheckJni dla rozwoju NDK?
- 17. Jak włączyć wklejanie tylko dla liter alfabetu
- 18. Jak włączyć SMTP dla IIS 8?
- 19. Jak włączyć kodowanie zaleceń dla Zaćmienie?
- 20. Jak włączyć minizrzuty w Java dla Windows
- 21. Jak włączyć "Treść dynamiczna" dla strony początkowej?
- 22. Jak włączyć LIMIT dla USUŃ w SQLite?
- 23. Jak włączyć kompresję gzip dla favicon.ico?
- 24. Jak włączyć ARC dla pojedynczego pliku
- 25. Jak włączyć obsługę iCloud dla sqlite?
- 26. Ograniczenie odbicia dla UIScrollview w iOS
- 27. Określanie kierunku pionowego touchmapy
- 28. Który wątek otrzyma blokadę?
- 29. FlexSlider z kierunku RTL
- 30. Widoczne przepełnienie w jednym kierunku z przewijaniem w innym kierunku
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ą). –