Files
2026-07-13 12:35:01 +08:00

251 lines
8.8 KiB
Objective-C

//
// TLShakeViewController.m
// TLChat
//
// Created by 李伯坤 on 16/2/22.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLShakeViewController.h"
#import "TLShakeSettingViewController.h"
#import "TLShakeButton.h"
#import "NSFileManager+TLChat.h"
#define SHAKE_HEIGHT 90
@interface TLShakeViewController ()
@property (nonatomic, assign) TLShakeButtonType curType;
@property (nonatomic, strong) UIImageView *topLogoView;
@property (nonatomic, strong) UIImageView *bottomLogoView;
@property (nonatomic, strong) UIImageView *centerLogoView;
@property (nonatomic, strong) UIImageView *topLineView;
@property (nonatomic, strong) UIImageView *bottomLineView;
@property (nonatomic, strong) TLShakeButton *peopleButton;
@property (nonatomic, strong) TLShakeButton *songButton;
@property (nonatomic, strong) TLShakeButton *tvButton;
@end
@implementation TLShakeViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationItem setTitle:LOCSTR(@"摇一摇")];
[self.view setBackgroundColor:[UIColor colorBlackBG]];
UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"nav_setting"] style:UIBarButtonItemStylePlain target:self action:@selector(rightBarButtonDown:)];
[self.navigationItem setRightBarButtonItem:rightBarButton];
[self.view addSubview:self.centerLogoView];
[self.view addSubview:self.topLogoView];
[self.view addSubview:self.bottomLogoView];
[self.view addSubview:self.topLineView];
[self.view addSubview:self.bottomLineView];
[self.view addSubview:self.peopleButton];
[self.view addSubview:self.songButton];
[self.view addSubview:self.tvButton];
[self p_addMasonry];
self.curType = TLShakeButtonTypePeople;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSString *centreImageName = [[NSUserDefaults standardUserDefaults] objectForKey:@"Shake_Image_Path"];
if (centreImageName) {
NSString *path = [NSFileManager pathUserSettingImage:centreImageName];
[self.centerLogoView setImage:[UIImage imageNamed:path]];
}
else {
[self.centerLogoView setImage:[UIImage imageNamed:@"shake_logo_center"]];
}
}
#pragma mark - Event Response
- (void)controlButtonDown:(TLShakeButton *)sender
{
if (sender.isSelected) {
return;
}
self.curType = sender.type;
[self.peopleButton setSelected:self.peopleButton.type == sender.type];
[self.songButton setSelected:self.songButton.type == sender.type];
[self.tvButton setSelected:self.tvButton.type == sender.type];
}
- (void)rightBarButtonDown:(UIBarButtonItem *)sender
{
TLShakeSettingViewController *shakeSettingVC = [[TLShakeSettingViewController alloc] init];
PushVC(shakeSettingVC);
}
// 摇动手机
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if ([self.topLineView isHidden]) {
[self.topLineView setHidden:NO];
[self.bottomLineView setHidden:NO];
[UIView animateWithDuration:0.5 animations:^{
[self.topLogoView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.view.mas_centerY).mas_offset(-10 - SHAKE_HEIGHT);
}];
[self.bottomLogoView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.view.mas_centerY).mas_offset(-10 + SHAKE_HEIGHT);
}];
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.5 animations:^{
[self.topLogoView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.view.mas_centerY).mas_offset(-10);
}];
[self.bottomLogoView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.view.mas_centerY).mas_offset(-10);
}];
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
[self.topLineView setHidden:YES];
[self.bottomLineView setHidden:YES];
}];
});
}];
}
}
#pragma mark - Private Methods -
- (void)p_addMasonry
{
[self.centerLogoView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.view);
make.width.mas_equalTo(self.view);
make.height.mas_equalTo(200);
}];
[self.topLogoView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.view.mas_centerY).mas_offset(-10);
make.centerX.mas_equalTo(self.view);
make.width.mas_equalTo(self.view);
make.height.mas_equalTo(150);
}];
[self.bottomLogoView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.view.mas_centerY).mas_offset(-10);
make.centerX.mas_equalTo(self.view);
make.width.mas_equalTo(self.view);
make.height.mas_equalTo(150);
}];
[self.topLineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(self.view);
make.top.mas_equalTo(self.topLogoView.mas_bottom);
}];
[self.bottomLineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.bottomLogoView.mas_top);
}];
// bottom
CGFloat widthButton = 40;
CGFloat space = (SCREEN_WIDTH - widthButton * 3) / 4 * 1.2;
[self.songButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.view).mas_offset(-15);
}];
[self.peopleButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.songButton);
make.right.mas_equalTo(self.songButton.mas_left).mas_offset(-space);
}];
[self.tvButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.songButton);
make.left.mas_equalTo(self.songButton.mas_right).mas_offset(space);
}];
}
#pragma mark - Getter -
- (UIImageView *)topLogoView
{
if (_topLogoView == nil) {
_topLogoView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shake_logo_top"]];
[_topLogoView setBackgroundColor:[UIColor colorBlackBG]];
[_topLogoView setContentMode:UIViewContentModeBottom];
}
return _topLogoView;
}
- (UIImageView *)bottomLogoView
{
if (_bottomLogoView == nil) {
_bottomLogoView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shake_logo_bottom"]];
[_bottomLogoView setBackgroundColor:[UIColor colorBlackBG]];
[_bottomLogoView setContentMode:UIViewContentModeTop];
}
return _bottomLogoView;
}
- (UIImageView *)centerLogoView
{
if (_centerLogoView == nil) {
_centerLogoView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shake_logo_center"]];
[_centerLogoView setContentMode:UIViewContentModeScaleAspectFill];
[_centerLogoView setClipsToBounds:YES];
}
return _centerLogoView;
}
- (UIImageView *)topLineView
{
if (_topLineView == nil) {
_topLineView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shake_line_top"]];
[_topLineView setHidden:YES];
}
return _topLineView;
}
- (UIImageView *)bottomLineView
{
if (_bottomLineView == nil) {
_bottomLineView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shake_line_bottom"]];
[_bottomLineView setHidden:YES];
}
return _bottomLineView;
}
- (TLShakeButton *)peopleButton
{
if (_peopleButton == nil) {
_peopleButton = [[TLShakeButton alloc] initWithType:TLShakeButtonTypePeople title:@"人" iconPath:@"shake_button_people" iconHLPath:@"shake_button_peopleHL"];
[_peopleButton setSelected:YES];
[_peopleButton addTarget:self action:@selector(controlButtonDown:) forControlEvents:UIControlEventTouchUpInside];
}
return _peopleButton;
}
- (TLShakeButton *)songButton
{
if (_songButton == nil) {
_songButton = [[TLShakeButton alloc] initWithType:TLShakeButtonTypeSong title:@"歌曲" iconPath:@"shake_button_music" iconHLPath:@"shake_button_musicHL"];
[_songButton addTarget:self action:@selector(controlButtonDown:) forControlEvents:UIControlEventTouchUpInside];
}
return _songButton;
}
- (TLShakeButton *)tvButton
{
if (_tvButton == nil) {
_tvButton = [[TLShakeButton alloc] initWithType:TLShakeButtonTypeTV title:@"电视" iconPath:@"shake_button_tv" iconHLPath:@"shake_button_tvHL"];
[_tvButton addTarget:self action:@selector(controlButtonDown:) forControlEvents:UIControlEventTouchUpInside];
}
return _tvButton;
}
@end