#ios #objective-c #xcode #uigesturerecognizer #viewcontroller
#iOS #objective-c #xcode #распознаватель пользовательских настроек #viewcontroller
Вопрос:
Я новичок в Objective-C и Xcode, и у меня возникают трудности с изменением представлений. Я понимаю, что вы можете использовать UIScrollView
для переключения между видами изображений, но я хотел бы просто провести пальцем вправо, чтобы изменить виды, и проведите пальцем влево, чтобы вернуться. У меня есть AppDelegate.h
и AppDelegate.m
которые не были изменены. ViewController.h
и ViewController.m
приведены ниже:
ViewController.h:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
ViewController.m:
#import "ViewController.h"
#import "ViewController2.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//sets up gesture recognizer
UISwipeGestureRecognizer *swipeRightGesture=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
[self.view addGestureRecognizer:swipeRightGesture];
swipeRightGesture.direction=UISwipeGestureRecognizerDirectionRight;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)handleSwipeGesture:(UISwipeGestureRecognizer *)sender
{
NSUInteger touches = sender.numberOfTouches;
if (touches == 2)
{
if (sender.state == UIGestureRecognizerStateEnded)
{
ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
[self.navigationController pushViewController:vc2 animated:YES];
}
}
}
@end
У меня также есть ViewController2.h
и ViewController2.m
, которые я связал со вторым представлением в раскадровке вместе с жестом, который я связал с handleSwipeGesture
методом выше.
Комментарии:
1. вы хотите провести двумя пальцами? или просто одним пальцем?
Ответ №1:
- (void)viewDidLoad
{
[super viewDidLoad];
UISwipeGestureRecognizer *oneFingerSwipeLeft = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(oneFingerSwipeLeft:)] ;
[oneFingerSwipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:oneFingerSwipeLeft];
}
- (void)oneFingerSwipeLeft:(UITapGestureRecognizer *)recognizer
{
NSLog(@"Swiped left");
// Add your navigation Code Here
}
Вы можете использовать это, если хотите провести одним пальцем. Если вы хотите добавить два пальца, добавьте свой
NSUInteger touches = sender.numberOfTouches;
if (touches == 2)
{
if (sender.state == UIGestureRecognizerStateEnded)
{
}
}
приведенный выше код в (void)onefingerSwipeLeft
методе
Ответ №2:
- (IBAction)handleSwipeGesture:(UISwipeGestureRecognizer *)sender
не обязательно быть IBAction, поскольку он не подключен к IBOutlet. Вместо этого он должен вернуться void
.
Кроме того, вместо проверки количества касаний после того, как жест уже был распознан, вы можете сделать два касания обязательным условием для его распознавания вообще, используя строку:
swipeRightGesture.numberOfTouchesRequired = 2;
Следовательно, методу -(void)handleSwipeGesture
больше не нужно принимать аргумент, поэтому вы можете удалить двоеточие из строки, где вы объявляете распознаватель жестов.
Окончательный код может выглядеть примерно так:
UISwipeGestureRecognizer *swipeRightGesture=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture)];
swipeRightGesture.direction=UISwipeGestureRecognizerDirectionRight;
swipeRightGesture.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:swipeRightGesture];
...
...
- (void)handleSwipeGesture {
ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
[self.navigationController pushViewController:vc2 animated:YES];
}