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]