Ich und PageViewController - die unendliche Geschichte!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich und PageViewController - die unendliche Geschichte!

    Hi,
    ich muss mal wieder mit den PageViewController arbeiten und habe damit wieder mal meine Probleme. Ich habe die zwei Methoden

    Quellcode

    1. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

    und

    Quellcode

    1. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
    implementiert. Das sieht so aus:

    Quellcode

    1. -(UIViewController *)getViewControllerForIndex {
    2. if (self.index == 0) {
    3. return [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];
    4. } else if (self.index == 1) {
    5. return [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
    6. } else if (self.index == 2) {
    7. return [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"];
    8. }
    9. return nil;
    10. }
    11. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    12. self.index--;
    13. if (self.index < 0) {
    14. return nil;
    15. }
    16. return [self getViewControllerForIndex];
    17. }
    18. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    19. self.index++;
    20. if (self.index > 3) {
    21. return nil;
    22. }
    23. return [self getViewControllerForIndex];
    24. }
    Alles anzeigen


    Das ganze läuft auch flüssig aber ich bekomme eine Memory Warning wenn ich mehrmals hin und her scrolle. Logisch, da ich ja viele viele Controller erzeuge. Ich hatte mir das so gedacht, dass ich einmal den Controller erzeuge und den dann immer nur zurückgebe. Aber das funktioniert nicht. Der Bildschirm wird da schwarz. Was kann ich tun?? Das Ding macht mich fertig!
  • Du solltest die Variable index nur erhöhen oder vermindern, wenn Du auch tatsächlich einen Viewcontroller zurückgibst. Wenn Du nur drei Controller brauchst, kannst Du die wahrscheinlich auch in einem Array ablegen und wiederverwenden, anstatt sie jedes Mal neu zu erzeugen.
    „Meine Komplikation hatte eine Komplikation.“
  • danke! Aber das scheint auch irgendwie nicht zu funktionieren. Der ViewController erscheint kurz und danach wird der Bildschirm schwarz. Habe ich einen Fehler drinnen?

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. NKCameraViewController *cameraController = [self.storyboard instantiateViewControllerWithIdentifier:@"cameraViewController"];
    5. NKCameraRollViewController *cameraRollController = [self.storyboard instantiateViewControllerWithIdentifier:@"cameraRollViewController"];
    6. self.controllers = @[cameraRollController, cameraRollController, cameraController];
    7. self.index = 1;
    8. .... (PageViewController erstellen)
    9. }
    10. -(UIViewController *)getViewControllerForIndex {
    11. return [self.controllers objectAtIndex:self.index];
    12. }
    13. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    14. if (self.index-1 < 0) {
    15. return nil;
    16. } else {
    17. self.index--;
    18. }
    19. return [self getViewControllerForIndex];
    20. }
    21. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    22. if (self.index+1 > 1) {
    23. return nil;
    24. } else {
    25. self.index++;
    26. }
    27. return [self getViewControllerForIndex];
    28. }
    Alles anzeigen


    Das komische ist, dass nur der Kamera Controller schwarz wird und der andere Controller nicht.
  • Ich habe jetzt eine Lösung gefunden ist zwar bestimmt nicht die beste aber funktioniert.

    Quellcode

    1. @interface NKPageViewController ()
    2. @property (assign, nonatomic) NSInteger index;
    3. @property (strong, nonatomic) NSArray *controllers;
    4. @property BOOL indexNullSet;
    5. @end
    6. @implementation NKPageViewController
    7. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    8. {
    9. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    10. if (self) {
    11. // Custom initialization
    12. }
    13. return self;
    14. }
    15. - (void)viewDidLoad
    16. {
    17. [super viewDidLoad];
    18. self.indexNullSet = NO;
    19. NKCameraViewController *cameraController = [self.storyboard instantiateViewControllerWithIdentifier:@"cameraViewController"];
    20. NKCameraRollViewController *cameraRollController = [self.storyboard instantiateViewControllerWithIdentifier:@"cameraRollViewController"];
    21. self.controllers = @[cameraRollController, cameraController];
    22. }
    23. -(UIViewController *)getViewControllerForIndex {
    24. return [self.controllers objectAtIndex:self.index];
    25. }
    26. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    27. if (self.index-1 < 0) {
    28. return nil;
    29. } else {
    30. self.index--;
    31. }
    32. if (self.index == 0 && self.indexNullSet == NO) {
    33. self.indexNullSet = YES;
    34. return [self getViewControllerForIndex];
    35. }
    36. return nil;
    37. }
    38. - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    39. if (self.index+1 > 1) {
    40. return nil;
    41. } else {
    42. self.index++;
    43. }
    44. return nil;
    45. }
    46. @end
    Alles anzeigen