编辑:有没有办法以编程方式在 UIView 上着陆?
当用户按下 UIButton 时,appdelegate 会设置一个新的 rootviewcontroller。新控制器有最后一个视图的屏幕截图,我希望用户将“视图”(图像)从屏幕上滑出。一切正常,但我似乎无法使用 UIPanGestureRecognizer,直到手指抬起然后再次触地。所以因为我试图以编程方式添加一个 UIControlEvent - 事后看来,这没有任何意义。
无论如何,有什么想法吗?
编辑:有没有办法以编程方式在 UIView 上着陆?
当用户按下 UIButton 时,appdelegate 会设置一个新的 rootviewcontroller。新控制器有最后一个视图的屏幕截图,我希望用户将“视图”(图像)从屏幕上滑出。一切正常,但我似乎无法使用 UIPanGestureRecognizer,直到手指抬起然后再次触地。所以因为我试图以编程方式添加一个 UIControlEvent - 事后看来,这没有任何意义。
无论如何,有什么想法吗?
在 touch up而不是 touch down 时设置一个新的 rootviewcontroller ,这将解决您的问题。
好吧,如果您将平移手势识别器添加到按钮,并且将按钮的操作设置为在触地时触发,那么您当然可以先触地然后平移以在按钮上工作。我认为进行转换的正确方法是让按钮的 touch down 方法实例化新控制器,并将其视图添加到窗口的子视图中。然后,滑动(或平移)将动画出旧视图,切换根视图控制器,最后从窗口中删除旧视图。使用此方法,您无需使用屏幕截图,也无需尝试将原始触摸传递给新视图。像这样的东西(为了简单起见,我使用了滑动而不是平底锅):
- (IBAction)touchDownMethod:(UIButton *)sender {
self.nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"NextVC"];
self.nextVC.view.frame = self.view.frame;
[self.view.window insertSubview:self.nextVC.view belowSubview:self.view];
}
- (IBAction)SwipeAwayInitialController:(UISwipeGestureRecognizer *)sender {
[UIView animateWithDuration:.5 animations:^{
self.view.center = CGPointMake(self.view.center.x - self.view.bounds.size.width, self.view.center.y);
} completion:^(BOOL finished) {
self.view.window.rootViewController = self.nextVC;
[self.view removeFromSuperview];
}];
}