2017-02-12 1 views
0

Ich habe eine UIView in einer separaten Klasse erstellt, und ich versuche, es in meinem ViewController zu animieren. Es sollte wie der Benachrichtigungsbildschirm auf dem iPhone funktionieren, der angezeigt wird, wenn Sie nach unten wischen, und dann können Sie ihn zurückwischen.UISwipeGestureRecognizer mit UIView erstellt in einer separaten Klasse funktioniert nicht

Ich kann meine benutzerdefinierte Ansicht nach unten wischen, aber wenn ich versuche, es zurück zu wischen, wird die Wischgeste nicht gestartet.

Ich bin ein Neuling, so dass jede Hilfe sehr geschätzt wird!

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    NotificationView *notificationView = [[NotificationView alloc]init]; 
    [self.view addSubview:notificationView]; 



    UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeDown:)]; 
    swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown; 

    UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeUp:)]; 
    swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp; 

    [self.view addGestureRecognizer:swipeDownGestureRecognizer]; 
    [notificationView addGestureRecognizer:swipeUpGestureRecognizer]; 

} 

-(void) swipeUp: (UISwipeGestureRecognizer *) recognizer{ 

    UIView *notificationView = [[NotificationView alloc]init]; 
    notificationView = recognizer.view; 

    [UIView animateWithDuration:2.0 animations:^{ 
     notificationView.frame = CGRectMake(0, 0, 414, 723); 
    }]; 

} 

-(void) swipeDown: (UISwipeGestureRecognizer *) recognizer{ 

    UIView *notificationView = [[NotificationView alloc]init]; 
    notificationView = recognizer.view; 

    [UIView animateWithDuration:2.0 animations:^{ 
     notificationView.frame = CGRectMake(0, 723, 414, 723); 
    }]; 

} 

Antwort

0

Sie sollten eine Eigenschaft mit Ihrem notificationView erstellen und einen Verweis auf sie halten, und nicht einen neuen und immer erstellen.

@property (strong, nonatomic) NotificationView *notificationView; 

Und in Ihrem viewDidLoad:

 _notificationView = [[NotificationView alloc] init]; 

// Important line to solve your problems on gestures not fired off on your notification view 
_notificationView.userInteractionEnabled = YES; 

     [self.view addSubview:_notificationView]; 

und einfach ändern:

-(void)swipeDown:(UISwipeGestureRecognizer *)recognizer { 

    [UIView animateWithDuration:2.0 animations:^{ 
     _notificationView.frame = CGRectMake(0, 723, 414, 723); 
    }]; 

} 

Sie in einem Tutorial aussehen sollte, wie Eigenschaften arbeiten. Und Sie sollten look into This Thread zu vermeiden, dass Animationen mehrmals durch Gestenstatus aufgerufen werden.

0

notificationView in ViewDidLoad sollte der ViewControllers-Eigenschaft zugewiesen werden, und Sie sollten keine Init-Ansichten in den Aktionen zur Gestenerkennung zuordnen.

Verwandte Themen