Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Threema/Threema/Onboarding/Pager/   (Social Medium ©)  Datei vom 26.9.2026 mit Größe 6 kB image not shown  

Quelle  OnboardingPageViewController.m   Sprache: Unknown

 

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.0 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.