W przypadku serii ujęć IOS, jeśli nie chcesz korzystać z nawigacji, nie możesz używać funkcji pchania. Następnie możesz użyć modalnej segue lub niestandardowej segue. W modalnej segue, istnieją cztery przejścia:
- Pokrycie pionowe
- Odwróć w poziomie
- Krzyż Rozpuścić
- Częściowa Curl
Jednak wszystkie z tych predefiniowanych animacji Segue nie może preforma poziomej przesuwanej animacji. Jeśli chcesz użyć poziomego efektu przesuwania, musisz użyć niestandardowego przejścia. Musisz zastąpić tę funkcję:
- (void) perform
{
UIViewController *desViewController = (UIViewController *)self.destinationViewController;
UIView *srcView = [(UIViewController *)self.sourceViewController view];
UIView *desView = [desViewController view];
desView.transform = srcView.transform;
desView.bounds = srcView.bounds;
if(isLandscapeOrientation)
{
if(isDismiss)
{
desView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height);
}
else
{
desView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height);
}
}
else
{
if(isDismiss)
{
desView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
}
else
{
desView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
}
}
UIWindow *mainWindow = [[UIApplication sharedApplication].windows objectAtIndex:0];
[mainWindow addSubview:desView];
// slide newView over oldView, then remove oldView
[UIView animateWithDuration:0.3
animations:^{
desView.center = CGPointMake(srcView.center.x, srcView.center.y);
if(isLandscapeOrientation)
{
if(isDismiss)
{
srcView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height);
}
else
{
srcView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height);
}
}
else
{
if(isDismiss)
{
srcView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
}
else
{
srcView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
}
}
}
completion:^(BOOL finished){
//[desView removeFromSuperview];
[self.sourceViewController presentModalViewController:desViewController animated:NO];
}];
}
Jeśli nadal masz problem, możesz sprawdzić ten wpis. Posiada również film na YouTube, aby pokazać, w jaki sposób realizować ten niestandardowy segue:
Create Push Segue Animation Without UINavigation Controller
Jak ukryć interfejs w serii ujęć? A następnie w jaki sposób programowo popychać i otwierać ViewControllers? – Crashalot