写到一个这样的页面,登录和注册功能都在同一个页面中,先显示登录页面:
然后没有账号的话就点击“注册账号”将“注册视图”移过来,同时将登录视图移出显示区:
完成之后,就变成了注册页面了:
页面是通过xib文件摆放控件摆出来的,视图切换动画代码如下:
动画的重要就只是改变一个约束的常量,让一部分移出到屏幕外,让屏幕外的一部分移入到屏幕内,用一样的思路,可以实现一个视图从屏幕外飞到屏幕中的动画:
//
// LoginRegisterViewController.m
//
// Copyright © 2016年 George. All rights reserved.
//
#import "LoginRegisterViewController.h"
@interface LoginRegisterViewController ()
// 这个约束常量是指“包裹登录视图和注册视图的视图”的x坐标
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftLeadingConstraint;
@end
@implementation LoginRegisterViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// 下面实现点击按钮之后,登录视图部分与注册视图部分的动画切换效果
- (IBAction)showLoginOrRegister:(UIButton *)sender {
// 如果在输入时,停止输入
[self.view endEditing:YES];
// 判断当前“登录视图”和“注册视图”的位置关系
if (self.leftLeadingConstraint.constant == 0) {
// 约束的常量为零时,表示当前控制器看到的是“登录视图”,所以点击之后是要跳到注册视图
self.leftLeadingConstraint.constant = - self.view.frame.size.width;
[sender setTitle:@"已有账号?" forState:UIControlStateNormal];
} else {
// 当前控制器显示的是“注册视图”,点击后跳到登录视图
self.leftLeadingConstraint.constant = 0;
[sender setTitle:@"注册账号" forState:UIControlStateNormal];
}
// 上面代码改变视图位置,后面在动画中layoutSubviews
[UIView animateWithDuration:0.5 animations:^{
[self.view layoutIfNeeded];
}];
}
@end
下面看一下“包裹登录视图和注册视图的视图”是个什么东西: