通过修改约束常量,完成视图切换动画

写到一个这样的页面,登录和注册功能都在同一个页面中,先显示登录页面:

显示登录页面

然后没有账号的话就点击“注册账号”将“注册视图”移过来,同时将登录视图移出显示区:

登录视图注册视图切换

完成之后,就变成了注册页面了:

显示注册页面

页面是通过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

下面看一下“包裹登录视图和注册视图的视图”是个什么东西:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值