思路:
在一个UIView设置它的Frame的宽度是屏幕的两倍,然后把登录的View和注册的View同时加载这个View上(注册View.x=这个View宽度的一半),点击切换按钮时改变这个UIView的leadingConstraint(View.x)就可以让这两个View显示。
代码:
#import "HKLoginRegisterViewController.h"
#import "HKLoginRegisterView.h"
#import "HKFastLoginView.h"
@interface HKLoginRegisterViewController ()
@property (weak, nonatomic) IBOutlet UIView *middleView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leadCons;
@property (weak, nonatomic) IBOutlet UIView *bottomView;
@end
@implementation HKLoginRegisterViewController
- (IBAction)close:(UIButton *)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)clickRegister:(UIButton *)sender {
sender.selected = !sender.selected;
//平移中间View
_leadCons.constant = _leadCons.constant == 0 ? - self.middleView.width * 0.5 : 0;
[UIView animateWithDuration:0.25 animations:^{
[self.view layoutIfNeeded];
}];
}
//1.划分结构(顶部 中间 底部)
//2.占位视图思想(分块)
//3.越复杂的界面 越要封装(复用)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
/*
屏幕适配:
1.一个View从xib加载,需不需要重新固定尺寸 一定要在外部再确定下
2.在ViewDidLoad设置Frame好不好, 开发中一般在viewDidLayoutSubviews布局子控件 设置Frame
*/
self.view.backgroundColor = kRedColor;
// 1.创建登录view
HKLoginRegisterView *loginView = [HKLoginRegisterView loginView];
// 添加到中间的view
[self.middleView addSubview:loginView];
// 2.添加注册界面
HKLoginRegisterView *registerView = [HKLoginRegisterView registerView];
registerView.x = self.middleView.width * 0.5;
// 添加到中间的view
[self.middleView addSubview:registerView];
//3. 添加快速登录view
HKFastLoginView *fastLoginView = [HKFastLoginView fastLoginView];
// 添加到底部的view
[self.bottomView addSubview:fastLoginView];
}
// viewDidLayoutSubviews:才会根据布局调整控件的尺寸
- (void)viewDidLayoutSubviews
{
// 一定要调用super
[super viewDidLayoutSubviews];
HKLoginRegisterView *loginView = self.middleView.subviews[0];
loginView.frame = CGRectMake(0, 0, self.middleView.width * 0.5, self.middleView.height);
HKLoginRegisterView *registerView = self.middleView.subviews[1];
registerView.frame = CGRectMake( self.middleView.width * 0.5, 0,self.middleView.width * 0.5, self.middleView.height);
// 设置快速登录
HKFastLoginView *fastLoginView = self.bottomView.subviews.firstObject;
fastLoginView.frame = self.bottomView.bounds;
}
效果图:

登录.gif