سؤال

لدي تطبيق يحتوي على مركز الرأي مع وجهات النظر إلى كل جانب.أريد أن يكون اثنين من أزرار شريط التنقل ، اليسار واليمين الذي دفع جديد الملاحة تحكم على عرض من اليسار أو اليمين.

عند تغيير وجهات النظر عن طريق دفع عرض جديد باستخدام pushviewController:طريقة NavigationController ، ويبدو أن الرأي منزلق من الجانب الأيمن.كيف يمكنني تغيير هذه الشريحة من اليسار ؟

هل كانت مفيدة؟

المحلول

بدلا من استخدام وحدة تحكم الملاحة، أود فقط نقل العرض.

CGRect inFrame = [currentView frame];
CGRect outFrame = firstFrame;
outFrame.origin.x -= inFrame.size.width;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];

[newView setFrame:inFrame];
currentView setFrame:outFrame];

[UIView commitAnimations];

نصائح أخرى

لقد قمت بتغيير اتجاه الرسوم المتحركة عندما ندفع ViewController. يمكنك تغيير نوع الرسوم المتحركة هنا الرسوم المتحركة setsubtype: kcatransitionfromright]؛

 ViewController *elementController = [[ViewController alloc] init];

// set the element for the controller
ViewController.element = element;


// push the element view controller onto the navigation stack to display it

CATransition *animation = [CATransition animation];
[[self navigationController] pushViewController:elementController animated:NO];
[animation setDuration:0.45];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
[[elementController.view layer] addAnimation:animation forKey:@"SwitchToView1"];

[elementController release];

أنا لا أعتقد أنك يمكن أن تحدد بوضوح انزلاق الاتجاه UINavigationControllers.ما كنت قد تكون قادرة على القيام به هو البوب العرض الحالي إيقاف الملاحة كومة لإظهار قبل الرأي ، التي من شأنها تحريك بالطريقة التي تريدها.ومع ذلك قد تكون معقدة إذا كنت تريد أن يكون لها رأي مختلف وحدات التحكم تظهر اعتمادا على ما تفعله في طريقة العرض الحالية.

إذا كان العمل الخاص بك ليست معقدة جدا ، يمكنك الاستمرار في إشارة إلى قبل عرض وحدة التحكم في وحدة تحكم العرض الحالي.اعتمادا على ما تفعله على العرض الحالي (مثل تحديد عرض الجدول الخلية) ، يمكنك تغيير أي البيانات التي تحتاجها في قبل عرض وحدة تحكم ،

[self.navigationController popViewController];

أو أيا كان الأسلوب الصحيح هو (أعتقد أن هذا قريب جدا من كيف هو).التي من شأنها أن تسمح لك تنزل nav كومة مع الرسوم المتحركة تريد ، الذي يعمل إذا nav المكدس لديه عدد محدد من الآراء حول ذلك.

إلى ما قاله ريد أولسن: يجب عليك فقط ربط زر واحد فقط، يبدأ الشريحة حتى نفس الأسلوب وإضافة BOOL التي تتبع إذا تم عرض الرأي أم لا. كل ما عليك فعله هو ضبط الأصل بشكل صحيح.

- (IBAction)slideMenuView 
{
  CGRect inFrame = [self.view frame];
  CGRect outFrame = self.view.frame;

  if (self.viewisHidden) {
    outFrame.origin.x += inFrame.size.width-50;
    self.viewisHidden = NO;
  } else {
    outFrame.origin.x -= inFrame.size.width-50;
    self.viewisHidden = YES;
  }
  [UIView beginAnimations:nil context:nil];
  [UIView setAnimationDuration:0.5];
  [self.menuView setFrame:inFrame];
  [self.view setFrame:outFrame];
  [UIView commitAnimations];
}

للحصول على زر "مدبب" نوع تحتاج إلى استخدام طريقة مختلفة.

في appdelegate الخاص بك:

UITableViewController *first = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
UITableViewController *second = [[SomeOtherViewController alloc] initWithStyle:UITableViewStylePlain];

NSArray *stack = [NSArray arrayWithObjects: first, second, nil];

UINavigationController *nav = [[UINavigationController alloc] init];
[nav setViewControllers:stack animated:NO];

يمكنك أن ترث RTLNAVICTONTroller: UINAVICTONTroller والكتابة فوق هذه الوظائف.

 - (void) pushViewController:(UIViewController *)viewController animated:(BOOL)animated
 {
     DummyViewController*dvc = [[DummyViewController alloc] init];
     [super pushViewController:viewController animated:NO];
     [super pushViewController:dvc animated:NO];
     [dvc release];
     [super popViewControllerAnimated:YES];
}

و

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
 UIViewController *firstViewController = [super popViewControllerAnimated:NO];
 UIViewController *viewController = [super popViewControllerAnimated:NO];
 [super pushViewController:viewController animated:animated];
 return firstViewController;
} 

وفي مندوب التطبيق:

navCon = [[RTLNavigationController alloc] init];

rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
rootViewController.contextDelegate = self;

DummyViewController *dvc = [[DummyViewController alloc]init];
[navCon pushViewController:dvc animated:NO];
[dvc release];

[navCon pushViewController:rootViewController animated:NO];
[self.window addSubview:navCon.view];

سوف يكون الضغط من اليسار إلى اليمين ويفرض من اليمين إلى اليسار

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top