Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  OnboardingPageViewController.m  Sprache: unbekannt

 
Spracherkennung für: .m vermutete Sprache: Lisp {Lisp[37] Masm[37] Rust[18]} [Methode: maximale Elemente, drei Dimensionen]

#import "OnboardingPageViewController.h"
#import "PageContentViewController.h"
#import "PageView.h"

@interface OnboardingPageViewController () <PageViewDataSource, PageViewDelegate, PageContentControllerDelegate>

@property PageView *pageContainerView;

@property NSInteger index;

@end

@implementation OnboardingPageViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;

    [self setup];
    [self updateNavigationButtons];
    [self updatePageControl];
        
    _pageContainerView.backgroundColor = [UIColor clearColor];
    
    [self setNeedsStatusBarAppearanceUpdate];
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

- (BOOL)shouldAutorotate {
    return NO;
}

-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
    if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
        return UIInterfaceOrientationMaskAll;
    } else {
        return UIInterfaceOrientationMaskPortrait;
    }
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

    [_pageContainerView setFrame:self.view.frame];
    [_pageContainerView resetPageFrames];
}

- (void)setViewControllers:(NSArray *)viewControllers {
    _viewControllers = viewControllers;

    // setup parent child relationship
    for (PageContentViewController *vc in _viewControllers) {
        vc.containerDelegate = self;
        [self addChildViewController:vc];
        [vc didMoveToParentViewController:self];
    }
}

- (void)setup {
    _pageContainerView = [[PageView alloc] initWithFrame:self.view.frame];
    _pageContainerView.delegate = self;
    _pageContainerView.datasource = self;
    _pageControl.isAccessibilityElement = NO;
    
    [self.view addSubview:_pageContainerView];

    [self.view bringSubviewToFront:_controlsView];
    [_pageLeftButton setImage:[[UIImage systemImageNamed:@"chevron.left"] imageWithTintColor:UIColor.tintColor] forState:UIControlStateNormal];
    _pageLeftButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [_pageRightButton setImage:[[UIImage systemImageNamed:@"chevron.right"] imageWithTintColor:UIColor.tintColor] forState:UIControlStateNormal];
    _pageRightButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
    _pageLeftButton.accessibilityLabel = [BundleUtil localizedStringForKey:@"previous"];
    _pageRightButton.accessibilityLabel = [BundleUtil localizedStringForKey:@"next"];
    _pageControl.accessibilityLabel = [NSString stringWithFormat:@"%li %@ %li", (long)_pageControl.currentPage + 1, [BundleUtil localizedStringForKey:@"from"], (long)_pageControl.numberOfPages];
    _index = 0;
    _controlsView.frame = CGRectMake(_controlsView.frame.origin.x, _controlsView.frame.origin.y + _controlsView.safeAreaInsets.top, _controlsView.frame.size.width, _controlsView.frame.size.height - _controlsView.safeAreaInsets.bottom);
}

- (NSInteger)nextIndexForIncrement:(NSInteger)increment {
    return _index + increment;
}

- (UIView *)viewAtIndex:(NSInteger)index {
    UIViewController *viewController = (UIViewController *)_viewControllers[index];
    return viewController.view;
}

- (void)updateNavigationButtons {
    if (_index == 0) {
        _pageLeftButton.hidden = YES;
    } else {
        _pageLeftButton.hidden = NO;
    }
    
    if (_index == _viewControllers.count - 1) {
        _pageRightButton.hidden = YES;
    } else {
        _pageRightButton.hidden = NO;
    }
}

- (void)updatePageControl {
    _pageControl.currentPage = _index;
    _pageControl.numberOfPages = _viewControllers.count;
}

#pragma mark - PageViewDataSource

- (UIView *) currentView: (CGRect) frame {
    return [self viewAtIndex:_index];
}

- (UIView *) nextView: (CGRect) frame {
    if (_index == _viewControllers.count - 1) {
        return nil;
    }
    
    NSInteger nextIndex = [self nextIndexForIncrement:1];
    return [self viewAtIndex:nextIndex];
}

- (UIView *) previousView: (CGRect) frame {
    if (_index == 0) {
        return nil;
    }

    NSInteger previousIndex = [self nextIndexForIncrement:-1];
    return [self viewAtIndex:previousIndex];
}

- (BOOL) moveToNext {
    if (_index == _viewControllers.count - 1) {
        return NO;
    }
    
    if ([self canMoveFromCurrentViewController]) {
        return NO;
    }
    
    _index++;
    _pageControl.accessibilityLabel = [NSString stringWithFormat:@"%li %@ %li", _index + 1, [BundleUtil localizedStringForKey:@"from"], (long)_pageControl.numberOfPages];
    return YES;
}

- (BOOL) moveToPrevious {
    if (_index == 0) {
        return NO;
    }
    
    _index--;
    _pageControl.accessibilityLabel = [NSString stringWithFormat:@"%li %@ %li", _index + 1, [BundleUtil localizedStringForKey:@"from"], (long)_pageControl.numberOfPages];
    return YES;
}

- (BOOL)canMoveFromCurrentViewController {
    PageContentViewController *currentVc = _viewControllers[_index];
    
    if ([currentVc respondsToSelector:@selector(isInputValid)]) {
        return [currentVc isInputValid] == NO;
    } else {
        return YES;
    }
}

- (UIViewController *)viewControllerForView:(UIView *)view {
    for (UIViewController *vc in _viewControllers) {
        if (vc.view == view) {
            return vc;
        }
    }
    
    return nil;
}

#pragma mark - PageViewDelegate

- (void) willPageFrom: (UIView *) fromView toView: (UIView *) toView {
    UIViewController *toVc = [self viewControllerForView:toView];
    [toVc beginAppearanceTransition:YES animated:YES];

    UIViewController *fromVc = [self viewControllerForView:fromView];
    [fromVc beginAppearanceTransition:NO animated:YES];
}

- (void) didPageFrom: (UIView *) fromView toView: (UIView *) toView {
    UIViewController *toVc = [self viewControllerForView:toView];
    [toVc endAppearanceTransition];

    UIViewController *fromVc = [self viewControllerForView:fromView];
    [fromVc endAppearanceTransition];

    [self updateNavigationButtons];
    [self updatePageControl];
}

#pragma mark - actions

- (IBAction)pageLeftAction:(id)sender {
    [_pageContainerView pageLeft];
}

- (IBAction)pageRightAction:(id)sender {
    [_pageContainerView pageRight];
}

- (IBAction)pageControlChanged:(id)sender {
    UIPageControl *pc = (UIPageControl *)sender;
    if (_index < pc.currentPage) {
        [_pageContainerView pageLeft];
    } else {
        [_pageContainerView pageRight];
    }
}

#pragma mark - PageContentControllerDelegate

- (void)hideControls:(BOOL)hideControls {
    CGFloat yOffset;
    if (hideControls) {
        yOffset = CGRectGetMaxY(self.view.frame);
    } else {
        yOffset = CGRectGetMaxY(self.view.frame) - CGRectGetHeight(_controlsView.frame);
    }

    CGRect rect = CGRectMake(_controlsView.frame.origin.x, yOffset, _controlsView.frame.size.width, _controlsView.frame.size.height);
    _controlsView.frame = rect;
    
    [_pageContainerView enablePanGesture:(hideControls == NO)];
}

- (void)pageRight {
    [_pageContainerView pageRight];
}

- (void)pageLeft {
    [_pageContainerView pageLeft];
}

@end

[Dauer der Verarbeitung: 0.12 Sekunden]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104852
#Domains=417151