2017-02-12 3 views
0

Я создал UIView в отдельном классе, и я пытаюсь его анимировать в моем ViewController. Он должен работать как экран уведомлений на iPhone, который появляется при прокрутке вниз, а затем вы можете прокручивать его обратно.UISwipeGestureRecognizer с UIView, созданный в отдельном классе, не работает

Я могу получить свой пользовательский вид, чтобы прокрутить вниз, но когда я пытаюсь провести его обратно, стирание жест не начинается.

Я новичок, поэтому любая помощь очень ценится!

- (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); 
    }]; 

} 

ответ

0

Необходимо создать объект с вашим уведомлениемПросмотр и сохранить ссылку на него, а не создавать новые снова и снова.

@property (strong, nonatomic) NotificationView *notificationView; 

и в вашем 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]; 

и просто изменить:

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

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

} 

Вы должны смотреть в учебник о том, как работают свойства. И вы должны look into This Thread, чтобы избежать анимации, вызываемой несколько раз и т. Д., Управляя состояниями жестов.

0

Уведомление в ViewDidLoad должно быть присвоено свойству viewControllers, и вы не должны выделять представления init в действиях распознавателя жестов.