1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-03 09:57:46 +01:00
Telegram/Telegraph/TGAttachmentSheetWindow.m
2016-02-25 01:03:51 +01:00

155 lines
3.8 KiB
Objective-C

#import "TGAttachmentSheetWindow.h"
#import "TGOverlayControllerWindow.h"
#import "TGNotificationWindow.h"
#import "TGAppDelegate.h"
@interface TGAttachmentSheetController : TGOverlayWindowViewController
{
}
@property (nonatomic, weak) TGAttachmentSheetWindow *attachmentSheetWindow;
@property (nonatomic, strong) TGAttachmentSheetView *attachmentSheetView;
@end
@implementation TGAttachmentSheetController
- (instancetype)init
{
self = [super init];
if (self != nil)
{
if (iosMajorVersion() < 7)
self.wantsFullScreenLayout = true;
}
return self;
}
- (void)loadView
{
[super loadView];
self.view.userInteractionEnabled = true;
TGAttachmentSheetView *attachmentSheetView = [[TGAttachmentSheetView alloc] initWithFrame:CGRectZero];
[self setAttachmentSheetView:attachmentSheetView];
}
- (void)setAttachmentSheetView:(TGAttachmentSheetView *)attachmentSheetView
{
[self setAttachmentSheetView:attachmentSheetView stickToBottom:false];
}
- (void)setAttachmentSheetView:(TGAttachmentSheetView *)attachmentSheetView stickToBottom:(bool)stickToBottom
{
[_attachmentSheetView removeFromSuperview];
_attachmentSheetView = attachmentSheetView;
_attachmentSheetView.frame = self.view.bounds;
_attachmentSheetView.attachmentSheetWindow = _attachmentSheetWindow;
_attachmentSheetView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:_attachmentSheetView];
if (stickToBottom)
[_attachmentSheetView scrollToBottomAnimated:false];
}
@end
@implementation TGAttachmentSheetWindow
- (instancetype)init
{
self = [super initWithFrame:TGAppDelegateInstance.rootController.applicationBounds];
if (self != nil)
{
self.windowLevel = UIWindowLevelStatusBar - 0.003f;
TGAttachmentSheetController *controller = [[TGAttachmentSheetController alloc] init];
controller.attachmentSheetWindow = self;
self.rootViewController = controller;
}
return self;
}
- (TGAttachmentSheetView *)view
{
[self.controller view];
return self.controller.attachmentSheetView;
}
- (TGAttachmentSheetController *)controller
{
return (TGAttachmentSheetController *)self.rootViewController;
}
- (void)switchToSheetView:(TGAttachmentSheetView *)sheetView
{
[self switchToSheetView:sheetView stickToBottom:false];
}
- (void)switchToSheetView:(TGAttachmentSheetView *)sheetView stickToBottom:(bool)stickToBottom
{
TGAttachmentSheetView *currentSheetView = self.view;
[currentSheetView animateOutForInterchange:true completion:^
{
[currentSheetView removeFromSuperview];
[self.controller setAttachmentSheetView:sheetView stickToBottom:stickToBottom];
[sheetView animateInInitial:false];
}];
}
- (void)showAnimated:(bool)animated completion:(void (^)(void))completion
{
self.hidden = false;
if (animated)
{
[[self view] animateIn];
if (completion != nil)
completion();
}
else
{
if (completion != nil)
completion();
}
}
- (void)dismissAnimated:(bool)animated completion:(void (^)(void))completion
{
if (animated)
{
[[self view] animateOut:^
{
self.hidden = true;
if (completion != nil)
completion();
if (self.dismissalBlock != nil)
self.dismissalBlock();
}];
}
else
{
self.hidden = true;
if (completion != nil)
completion();
if (self.dismissalBlock != nil)
self.dismissalBlock();
}
}
- (void)setHidden:(BOOL)hidden {
[super setHidden:hidden];
if (!hidden) {
[TGAppDelegateInstance.window endEditing:true];
}
}
@end