1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-02 09:27:55 +01:00
Telegram/Telegraph/TGTabletMainView.m
2015-10-01 19:19:52 +03:00

155 lines
6.4 KiB
Objective-C

#import "TGTabletMainView.h"
@interface TGTabletMainView ()
{
UIView *_stripeView;
UIView *_masterViewContainer;
UIView *_detailViewContainer;
UIView *_fakeNavigationBarView;
UIView *_fakeNavigationBarSeparatorView;
UIImageView *_blankLogoView;
}
@end
@implementation TGTabletMainView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
self.clipsToBounds = true;
CGRect detailViewContainerFrame = [self rectForDetailViewForFrame:frame];
_fakeNavigationBarView = [[UIView alloc] initWithFrame:CGRectMake(detailViewContainerFrame.origin.x, 0.0f, detailViewContainerFrame.size.width, 64.0f)];
_fakeNavigationBarView.backgroundColor = UIColorRGBA(0xf7f7f7, 1.0f);
[self addSubview:_fakeNavigationBarView];
CGFloat separatorHeight = [[UIScreen mainScreen] scale] > 1.0f + FLT_EPSILON ? 0.5f : 1.0f;
_fakeNavigationBarSeparatorView = [[UIView alloc] initWithFrame:CGRectMake(detailViewContainerFrame.origin.x, 64.0f - separatorHeight, detailViewContainerFrame.size.width, separatorHeight)];
_fakeNavigationBarSeparatorView.backgroundColor = UIColorRGB(0xb2b2b2);
[self addSubview:_fakeNavigationBarSeparatorView];
_blankLogoView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"DetailLogoBlank.png"]];
_blankLogoView.frame = CGRectMake(CGFloor(CGRectGetMidX(detailViewContainerFrame) - _blankLogoView.frame.size.width / 2.0f), CGFloor(CGRectGetMidY(detailViewContainerFrame) - _blankLogoView.frame.size.height / 2.0f) + 9.0f, _blankLogoView.frame.size.width, _blankLogoView.frame.size.height);
[self addSubview:_blankLogoView];
_detailViewContainer = [[UIView alloc] initWithFrame:detailViewContainerFrame];
_detailViewContainer.clipsToBounds = true;
[self addSubview:_detailViewContainer];
CGRect masterViewContainerFrame = [self rectForMasterViewForFrame:frame];
_masterViewContainer = [[UIView alloc] initWithFrame:masterViewContainerFrame];
_masterViewContainer.clipsToBounds = true;
[self addSubview:_masterViewContainer];
_stripeView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(masterViewContainerFrame), 0.0f, 1.0f, masterViewContainerFrame.size.height)];
_stripeView.backgroundColor = UIColorRGB(0x8e8e93);
[self addSubview:_stripeView];
}
return self;
}
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
[self layoutForFrame:frame];
}
- (void)layoutForFrame:(CGRect)frame {
CGRect masterViewContainerFrame = [self rectForMasterViewForFrame:frame];
_masterViewContainer.frame = masterViewContainerFrame;
_stripeView.frame = CGRectMake(CGRectGetMaxX(masterViewContainerFrame), 0.0f, 1.0f, masterViewContainerFrame.size.height);
masterViewContainerFrame.origin = CGPointZero;
_masterView.frame = masterViewContainerFrame;
CGRect detailViewContainerFrame = [self rectForDetailViewForFrame:frame];
_fakeNavigationBarView.frame = CGRectMake(detailViewContainerFrame.origin.x, 0.0f, detailViewContainerFrame.size.width, 64.0f);
_blankLogoView.frame = CGRectMake(CGFloor(CGRectGetMidX(detailViewContainerFrame) - _blankLogoView.frame.size.width / 2.0f), CGFloor(CGRectGetMidY(detailViewContainerFrame) - _blankLogoView.frame.size.height / 2.0f) + 9.0f, _blankLogoView.frame.size.width, _blankLogoView.frame.size.height);
CGFloat separatorHeight = [[UIScreen mainScreen] scale] > 1.0f + FLT_EPSILON ? 0.5f : 1.0f;
_fakeNavigationBarSeparatorView.frame = CGRectMake(detailViewContainerFrame.origin.x, 64.0f - separatorHeight, detailViewContainerFrame.size.width, separatorHeight);
_detailViewContainer.frame = detailViewContainerFrame;
detailViewContainerFrame.origin = CGPointZero;
_detailView.frame = detailViewContainerFrame;
}
- (void)setFullScreenDetail:(bool)fullScreenDetail {
if (fullScreenDetail != _fullScreenDetail) {
_fullScreenDetail = fullScreenDetail;
if (fullScreenDetail) {
[_fakeNavigationBarView removeFromSuperview];
[_fakeNavigationBarSeparatorView removeFromSuperview];
[_blankLogoView removeFromSuperview];
[_masterViewContainer removeFromSuperview];
[_stripeView removeFromSuperview];
} else {
[self insertSubview:_fakeNavigationBarView atIndex:0];
[self insertSubview:_fakeNavigationBarSeparatorView atIndex:1];
[self insertSubview:_blankLogoView atIndex:2];
[self insertSubview:_masterViewContainer aboveSubview:_detailViewContainer];
[self addSubview:_stripeView];
}
[self layoutForFrame:self.frame];
}
}
- (CGRect)rectForMasterViewForFrame:(CGRect)frame
{
return CGRectMake(0.0f, 0.0f, frame.size.width >= (1024.0f - FLT_EPSILON) ? 389.0f : 320.0f, frame.size.height);
}
- (CGRect)rectForDetailViewForFrame:(CGRect)frame
{
if (_fullScreenDetail) {
return CGRectMake(0.0f, 0.0f, frame.size.width, frame.size.height);
} else {
CGRect dialogListViewFrame = [self rectForMasterViewForFrame:frame];
return CGRectMake(dialogListViewFrame.size.width, 0.0f, MAX(0.0f, frame.size.width - dialogListViewFrame.size.width + 1.0f), frame.size.height);
}
}
- (void)setMasterView:(UIView *)masterView
{
[_masterView removeFromSuperview];
_masterView = masterView;
CGRect masterViewContainerFrame = [self rectForMasterViewForFrame:self.frame];
masterViewContainerFrame.origin = CGPointZero;
_masterView.frame = masterViewContainerFrame;
[_masterViewContainer addSubview:_masterView];
}
- (void)setDetailView:(UIView *)detailView
{
if (detailView == _detailView) {
CGRect detailViewContainerFrame = [self rectForDetailViewForFrame:self.frame];
detailViewContainerFrame.origin = CGPointZero;
_detailView.frame = detailViewContainerFrame;
[_detailViewContainer addSubview:_detailView];
} else {
[_detailView removeFromSuperview];
_detailView = detailView;
CGRect detailViewContainerFrame = [self rectForDetailViewForFrame:self.frame];
detailViewContainerFrame.origin = CGPointZero;
_detailView.frame = detailViewContainerFrame;
[_detailViewContainer addSubview:_detailView];
}
}
@end