mirror of
https://github.com/LeoNatan/LNPopupController.git
synced 2026-07-30 16:11:51 +00:00
385 lines
15 KiB
Objective-C
385 lines
15 KiB
Objective-C
//
|
|
// DemoPopupContentViewController.m
|
|
// LNPopupControllerExample
|
|
//
|
|
// Created by Leo Natan on 6/8/16.
|
|
// Copyright © 2016 Leo Natan. All rights reserved.
|
|
//
|
|
|
|
#if LNPOPUP
|
|
#import "DemoPopupContentViewController.h"
|
|
#import "SettingsTableViewController.h"
|
|
#import "RandomColors.h"
|
|
|
|
@import LNPopupController;
|
|
|
|
@interface DemoPopupContentView : UIView @end
|
|
@implementation DemoPopupContentView
|
|
|
|
- (void)setFrame:(CGRect)frame
|
|
{
|
|
// NSLog(@"Frame: %@", @(frame));
|
|
[super setFrame:frame];
|
|
}
|
|
|
|
@end
|
|
|
|
@interface DemoPopupContentViewController () @end
|
|
@implementation DemoPopupContentViewController
|
|
{
|
|
NSInteger _lastStyle;
|
|
}
|
|
|
|
- (void)loadView
|
|
{
|
|
self.view = [DemoPopupContentView new];
|
|
}
|
|
|
|
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
|
{
|
|
[coordinator animateAlongsideTransitionInView:self.popupPresentationContainerViewController.view animation:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
|
|
[self _setPopupItemButtonsWithTraitCollection:newCollection animated:context.animated];
|
|
} completion:nil];
|
|
|
|
[super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
|
|
}
|
|
|
|
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
|
{
|
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
|
}
|
|
|
|
- (void)_updateBackgroundColor
|
|
{
|
|
if(@available(iOS 13.0, *)) {
|
|
if(self.view.traitCollection.userInterfaceStyle != _lastStyle)
|
|
{
|
|
_lastStyle = self.view.traitCollection.userInterfaceStyle;
|
|
self.view.backgroundColor = LNSeedAdaptiveInvertedColor(@"Popup");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(_lastStyle == 0)
|
|
{
|
|
_lastStyle++;
|
|
self.view.backgroundColor = LNSeedDarkColor(@"Popup");
|
|
}
|
|
}
|
|
|
|
[self setNeedsStatusBarAppearanceUpdate];
|
|
}
|
|
|
|
- (void)button:(UIBarButtonItem*)button
|
|
{
|
|
NSLog(@"✓");
|
|
}
|
|
|
|
UIImage* LNSystemImage(NSString* named)
|
|
{
|
|
if (@available(iOS 13.0, *))
|
|
{
|
|
static UIImageSymbolConfiguration* largeConfig = nil;
|
|
static UIImageSymbolConfiguration* compactConfig = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
largeConfig = [UIImageSymbolConfiguration configurationWithScale:UIImageSymbolScaleUnspecified];
|
|
compactConfig = [UIImageSymbolConfiguration configurationWithScale:UIImageSymbolScaleMedium];
|
|
});
|
|
|
|
UIImageSymbolConfiguration* config;
|
|
if([[[NSUserDefaults standardUserDefaults] objectForKey:PopupSettingsBarStyle] unsignedIntegerValue] == LNPopupBarStyleCompact)
|
|
{
|
|
config = compactConfig;
|
|
}
|
|
else
|
|
{
|
|
config = largeConfig;
|
|
}
|
|
|
|
return [UIImage systemImageNamed:named withConfiguration:config];
|
|
}
|
|
else
|
|
{
|
|
UIImage* rv = [UIImage imageNamed:named];
|
|
|
|
if(rv != nil)
|
|
{
|
|
return rv;
|
|
}
|
|
|
|
return [UIImage imageNamed:@"gears"];
|
|
}
|
|
}
|
|
|
|
- (void)_setPopupItemButtonsWithTraitCollection:(UITraitCollection*)collection animated:(BOOL)animated
|
|
{
|
|
BOOL useCompact = [[NSUserDefaults.standardUserDefaults objectForKey:PopupSettingsBarStyle] unsignedIntegerValue] == LNPopupBarStyleCompact;
|
|
|
|
UIBarButtonItem* play = [[UIBarButtonItem alloc] initWithImage:LNSystemImage(@"play.fill") style:UIBarButtonItemStylePlain target:self action:@selector(button:)];
|
|
play.accessibilityLabel = NSLocalizedString(@"Play", @"");
|
|
play.accessibilityIdentifier = @"PlayButton";
|
|
play.accessibilityTraits = UIAccessibilityTraitButton;
|
|
|
|
UIBarButtonItem* stop = [[UIBarButtonItem alloc] initWithImage:LNSystemImage(@"stop.fill") style:UIBarButtonItemStylePlain target:self action:@selector(button:)];
|
|
stop.accessibilityLabel = NSLocalizedString(@"Stop", @"");
|
|
stop.accessibilityIdentifier = @"StopButton";
|
|
stop.accessibilityTraits = UIAccessibilityTraitButton;
|
|
|
|
UIBarButtonItem* next = [[UIBarButtonItem alloc] initWithImage:LNSystemImage(@"forward.fill") style:UIBarButtonItemStylePlain target:self action:@selector(button:)];
|
|
next.accessibilityLabel = NSLocalizedString(@"Next Track", @"");
|
|
next.accessibilityIdentifier = @"NextButton";
|
|
next.accessibilityTraits = UIAccessibilityTraitButton;
|
|
|
|
UIBarButtonItem* prev = [[UIBarButtonItem alloc] initWithImage:LNSystemImage(@"backward.fill") style:UIBarButtonItemStylePlain target:self action:@selector(button:)];
|
|
prev.accessibilityLabel = NSLocalizedString(@"Previous Track", @"");
|
|
prev.accessibilityIdentifier = @"PrevButton";
|
|
prev.accessibilityTraits = UIAccessibilityTraitButton;
|
|
|
|
UIBarButtonItem* more = [[UIBarButtonItem alloc] initWithImage:LNSystemImage(@"ellipsis") style:UIBarButtonItemStylePlain target:self action:@selector(button:)];
|
|
prev.accessibilityLabel = NSLocalizedString(@"More", @"");
|
|
prev.accessibilityIdentifier = @"MoreButton";
|
|
prev.accessibilityTraits = UIAccessibilityTraitButton;
|
|
|
|
if(useCompact)
|
|
{
|
|
play.width = 44;
|
|
prev.width = 44;
|
|
next.width = 44;
|
|
stop.width = 44;
|
|
more.width = 44;
|
|
|
|
if(collection.horizontalSizeClass == UIUserInterfaceSizeClassCompact)
|
|
{
|
|
[self.popupItem setLeadingBarButtonItems:@[ play ] animated:animated];
|
|
[self.popupItem setTrailingBarButtonItems:@[ more ] animated:animated];
|
|
}
|
|
else
|
|
{
|
|
[self.popupItem setLeadingBarButtonItems:@[ prev, play, next ] animated:animated];
|
|
[self.popupItem setTrailingBarButtonItems:@[ more ] animated:animated];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
prev.width = 50;
|
|
play.width = 50;
|
|
next.width = 50;
|
|
if(collection.horizontalSizeClass == UIUserInterfaceSizeClassCompact)
|
|
{
|
|
[self.popupItem setBarButtonItems:@[ play, next ] animated:NO];
|
|
}
|
|
else
|
|
{
|
|
[self.popupItem setBarButtonItems:@[ prev, play, next ] animated:NO];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (BOOL)prefersStatusBarHidden
|
|
{
|
|
return self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact;
|
|
}
|
|
|
|
- (void)viewDidMoveToPopupContainerContentView:(LNPopupContentView *)popupContentView
|
|
{
|
|
[super viewDidMoveToPopupContainerContentView:popupContentView];
|
|
|
|
if(popupContentView == nil)
|
|
{
|
|
return;
|
|
}
|
|
|
|
UIButton* customCloseButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
|
[customCloseButton setTitle:NSLocalizedString(@"Custom Close Button", @"") forState:UIControlStateNormal];
|
|
customCloseButton.translatesAutoresizingMaskIntoConstraints = NO;
|
|
|
|
UILabel* topLabel = [UILabel new];
|
|
topLabel.text = NSLocalizedString(@"Top", @"");
|
|
topLabel.textColor = [UIColor whiteColor];
|
|
topLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
topLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:topLabel];
|
|
|
|
NSLayoutConstraint* center = [topLabel.centerXAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.centerXAnchor];
|
|
center.priority = 500;
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[topLabel.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor],
|
|
center,
|
|
[topLabel.leadingAnchor constraintGreaterThanOrEqualToAnchor:popupContentView.popupCloseButton.trailingAnchor constant:8],
|
|
]];
|
|
|
|
UILabel* bottomLabel = [UILabel new];
|
|
bottomLabel.text = NSLocalizedString(@"Bottom", @"");
|
|
bottomLabel.textColor = [UIColor whiteColor];
|
|
bottomLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
bottomLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:bottomLabel];
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[bottomLabel.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
|
|
[bottomLabel.centerXAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.centerXAnchor]
|
|
]];
|
|
|
|
UILabel* leadingMarginLabel = [UILabel new];
|
|
leadingMarginLabel.text = NSLocalizedString(@"|-Leading (Margin)", @"");
|
|
leadingMarginLabel.textAlignment = NSTextAlignmentLeft;
|
|
leadingMarginLabel.textColor = [UIColor whiteColor];
|
|
leadingMarginLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
leadingMarginLabel.adjustsFontForContentSizeCategory = YES;
|
|
// leadingMarginLabel.adjustsFontSizeToFitWidth = YES;
|
|
leadingMarginLabel.numberOfLines = 0;
|
|
leadingMarginLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
|
leadingMarginLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:leadingMarginLabel];
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[leadingMarginLabel.leadingAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.leadingAnchor],
|
|
[leadingMarginLabel.topAnchor constraintEqualToAnchor:topLabel.bottomAnchor constant:60]
|
|
]];
|
|
|
|
UILabel* trailingMarginLabel = [UILabel new];
|
|
trailingMarginLabel.text = NSLocalizedString(@"Trailing (Margin)-|", @"");
|
|
trailingMarginLabel.textAlignment = NSTextAlignmentRight;
|
|
trailingMarginLabel.textColor = [UIColor whiteColor];
|
|
trailingMarginLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
trailingMarginLabel.adjustsFontForContentSizeCategory = YES;
|
|
// trailingMarginLabel.adjustsFontSizeToFitWidth = YES;
|
|
trailingMarginLabel.numberOfLines = 0;
|
|
trailingMarginLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
|
trailingMarginLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:trailingMarginLabel];
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[trailingMarginLabel.trailingAnchor constraintEqualToAnchor:self.view.layoutMarginsGuide.trailingAnchor],
|
|
[trailingMarginLabel.topAnchor constraintEqualToAnchor:topLabel.bottomAnchor constant:60],
|
|
[trailingMarginLabel.leadingAnchor constraintGreaterThanOrEqualToAnchor:leadingMarginLabel.trailingAnchor constant:8],
|
|
[trailingMarginLabel.widthAnchor constraintEqualToAnchor:leadingMarginLabel.widthAnchor]
|
|
]];
|
|
|
|
UILabel* leadingSafeAreaLabel = [UILabel new];
|
|
leadingSafeAreaLabel.text = NSLocalizedString(@"|-Leading (Safe Area)", @"");
|
|
leadingSafeAreaLabel.textAlignment = NSTextAlignmentLeft;
|
|
leadingSafeAreaLabel.textColor = [UIColor whiteColor];
|
|
leadingSafeAreaLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
leadingSafeAreaLabel.adjustsFontForContentSizeCategory = YES;
|
|
// leadingSafeAreaLabel.adjustsFontSizeToFitWidth = YES;
|
|
leadingSafeAreaLabel.numberOfLines = 0;
|
|
leadingSafeAreaLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
|
leadingSafeAreaLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:leadingSafeAreaLabel];
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[leadingSafeAreaLabel.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor],
|
|
[leadingSafeAreaLabel.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor constant:0]
|
|
]];
|
|
|
|
UILabel* trailingSafeAreaLabel = [UILabel new];
|
|
trailingSafeAreaLabel.text = NSLocalizedString(@"Trailing (Safe Area)-|", @"");
|
|
trailingSafeAreaLabel.textAlignment = NSTextAlignmentRight;
|
|
trailingSafeAreaLabel.textColor = [UIColor whiteColor];
|
|
trailingSafeAreaLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
|
|
trailingSafeAreaLabel.adjustsFontForContentSizeCategory = YES;
|
|
// trailingSafeAreaLabel.adjustsFontSizeToFitWidth = YES;
|
|
trailingSafeAreaLabel.numberOfLines = 0;
|
|
trailingSafeAreaLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
|
trailingSafeAreaLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[self.view addSubview:trailingSafeAreaLabel];
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[trailingSafeAreaLabel.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor],
|
|
[trailingSafeAreaLabel.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor constant:0],
|
|
[trailingSafeAreaLabel.leadingAnchor constraintGreaterThanOrEqualToAnchor:leadingSafeAreaLabel.trailingAnchor constant:8],
|
|
[trailingSafeAreaLabel.widthAnchor constraintEqualToAnchor:leadingSafeAreaLabel.widthAnchor]
|
|
]];
|
|
|
|
self.popupItem.accessibilityLabel = NSLocalizedString(@"Custom popup bar accessibility label", @"");
|
|
self.popupItem.accessibilityHint = NSLocalizedString(@"Custom popup bar accessibility hint", @"");
|
|
|
|
// UIView* safeAreaMask = [UIView new];
|
|
// safeAreaMask.translatesAutoresizingMaskIntoConstraints = NO;
|
|
// safeAreaMask.layer.borderColor = [UIColor.greenColor colorWithAlphaComponent:0.5].CGColor;
|
|
// safeAreaMask.layer.borderWidth = 2.0;
|
|
// [self.view addSubview:safeAreaMask];
|
|
// [NSLayoutConstraint activateConstraints:@[
|
|
// [self.view.safeAreaLayoutGuide.leadingAnchor constraintEqualToAnchor:safeAreaMask.leadingAnchor],
|
|
// [self.view.safeAreaLayoutGuide.trailingAnchor constraintEqualToAnchor:safeAreaMask.trailingAnchor],
|
|
// [self.view.safeAreaLayoutGuide.topAnchor constraintEqualToAnchor:safeAreaMask.topAnchor],
|
|
// [self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:safeAreaMask.bottomAnchor],
|
|
// ]];
|
|
//
|
|
// UIView* layoutMarginsMask = [UIView new];
|
|
// layoutMarginsMask.translatesAutoresizingMaskIntoConstraints = NO;
|
|
// layoutMarginsMask.layer.borderColor = [UIColor.whiteColor colorWithAlphaComponent:0.5].CGColor;
|
|
// layoutMarginsMask.layer.borderWidth = 2.0;
|
|
// [self.view addSubview:layoutMarginsMask];
|
|
// [NSLayoutConstraint activateConstraints:@[
|
|
// [self.view.layoutMarginsGuide.leadingAnchor constraintEqualToAnchor:layoutMarginsMask.leadingAnchor],
|
|
// [self.view.layoutMarginsGuide.trailingAnchor constraintEqualToAnchor:layoutMarginsMask.trailingAnchor],
|
|
// [self.view.layoutMarginsGuide.topAnchor constraintEqualToAnchor:layoutMarginsMask.topAnchor],
|
|
// [self.view.layoutMarginsGuide.bottomAnchor constraintEqualToAnchor:layoutMarginsMask.bottomAnchor],
|
|
// ]];
|
|
|
|
[self _updateBackgroundColor];
|
|
|
|
// UIButton* customCloseButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
|
// [customCloseButton setTitle:NSLocalizedString(@"Custom Close Button", @"") forState:UIControlStateNormal];
|
|
// customCloseButton.translatesAutoresizingMaskIntoConstraints = NO;
|
|
// [customCloseButton setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
|
|
// customCloseButton.pointerInteractionEnabled = YES;
|
|
// [customCloseButton addTarget:self action:@selector(_closePopup) forControlEvents:UIControlEventTouchUpInside];
|
|
// [self.view addSubview:customCloseButton];
|
|
// [NSLayoutConstraint activateConstraints:@[
|
|
// [self.view.safeAreaLayoutGuide.centerXAnchor constraintEqualToAnchor:customCloseButton.centerXAnchor],
|
|
// [self.view.safeAreaLayoutGuide.centerYAnchor constraintEqualToAnchor:customCloseButton.centerYAnchor],
|
|
// ]];
|
|
}
|
|
|
|
- (void)_closePopup
|
|
{
|
|
[self.popupPresentationContainerViewController closePopupAnimated:YES completion:nil];
|
|
}
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
[super viewWillAppear:animated];
|
|
}
|
|
|
|
- (void)viewDidAppear:(BOOL)animated
|
|
{
|
|
[super viewDidAppear:animated];
|
|
}
|
|
|
|
- (void)viewWillDisappear:(BOOL)animated
|
|
{
|
|
[super viewWillDisappear:animated];
|
|
}
|
|
|
|
- (void)viewDidDisappear:(BOOL)animated
|
|
{
|
|
[super viewDidDisappear:animated];
|
|
}
|
|
|
|
- (void)viewSafeAreaInsetsDidChange
|
|
{
|
|
[super viewSafeAreaInsetsDidChange];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
|
|
}
|
|
|
|
- (UIStatusBarStyle)preferredStatusBarStyle
|
|
{
|
|
if (@available(iOS 13.0, *)) {
|
|
return self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight ? UIStatusBarStyleLightContent : UIStatusBarStyleDarkContent;
|
|
} else {
|
|
return UIStatusBarStyleLightContent;
|
|
}
|
|
}
|
|
|
|
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
|
|
{
|
|
return UIStatusBarAnimationFade;//Slide;
|
|
}
|
|
|
|
@end
|
|
|
|
#endif
|