上图是Facebook的登录界面,看起来很漂亮,eamil框和passwod框合在一起,那么这种效果是怎么做出来的呢?我们都知道输入框用layer属性是可以做成圆角的形式,那么怎么样才能够仅仅只让上边框有圆角呢?

好,废话不多说,先来实战一下。

新建一个项目

现在xcode新建的项目都是自带故事板的,操作不是很方便,我们来把它改成说写代码

打开AppDelegate.m文件,添加以下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController=[[ViewController alloc] init];
[self.window makeKeyAndVisible];
return YES;
}

到此就完成了手写代码的第一步。

添加输入框和按钮

ViewController.m中添加以下代码

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) UITextField *account;
@property (nonatomic,strong) UITextField *password;
@property (nonatomic,strong) UIButton *loginButton; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor colorWithRed:51/255.0 green:204/255.0 blue:255/255.0 alpha:1]]; _account=[[UITextField alloc] initWithFrame:CGRectMake(20, 200, self.view.frame.size.width-40, 50)];
_account.backgroundColor=[UIColor whiteColor];
_account.placeholder=[NSString stringWithFormat:@"Email"];
[self.view addSubview:_account]; _password=[[UITextField alloc] initWithFrame:CGRectMake(20, 260, self.view.frame.size.width-40, 50)];
_password.backgroundColor=[UIColor whiteColor];
_password.placeholder=[NSString stringWithFormat:@"Password"];
[self.view addSubview:_password]; _loginButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[_loginButton setFrame:CGRectMake(20, 320, self.view.frame.size.width-40, 50)]; [_loginButton setTitle:@"Login" forState:UIControlStateNormal];
[_loginButton setBackgroundColor:[UIColor colorWithRed:51/255.0 green:102/255.0 blue:255/255.0 alpha:1]];
[_loginButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.view addSubview:_loginButton];
} @end

运行一下看看效果

Oh God!简直被丑哭了,完全没法看啊,我们来给它美化一下。

美化

先把输入框加上圆角属性。

Apple早就为开发者想到了,我们只要轻轻额添加一个属性即可实现这个效果

_account.layer.cornerRadius=5.0;

在layer下有一个cornerRadius属性,输入你想要圆角的大小就OK了。

运行程序,效果如上,恩,稍微好了那么一点点,还是很挫,接下来要把两个输入框合并起来。

但是合起来以后中间就会有凹进去的部分,所以我想到了另外几种方法。

1.单独只为上边添加圆角。

2.整体加一张背景。

两种方法都可以实现,那么我们先用第二种方法来实现。

先新建一个文件,继承UIView,把它作为背景。为什么要新建一个UIView呢,应为我们要用到它的绘图方法

- (void)drawRect:(CGRect)rect {
// Drawing code
}

ViewController.m中修改以下代码

   _background=[[textFieldBackground alloc] initWithFrame:CGRectMake(20, 200, self.view.frame.size.width-40, 100)];
[_background setBackgroundColor:[UIColor whiteColor]];
[[_background layer] setCornerRadius:5];
[[_background layer] setMasksToBounds:YES]; [self.view addSubview:_background]; _account=[[UITextField alloc] initWithFrame:CGRectMake(10, 0, self.view.frame.size.width-40, 50)];
[_account setBackgroundColor:[UIColor clearColor]];
_account.placeholder=[NSString stringWithFormat:@"Email"];
_account.layer.cornerRadius=5.0;
[_background addSubview:_account]; _password=[[UITextField alloc] initWithFrame:CGRectMake(10, 50, self.view.frame.size.width-40, 50)];
[_account setBackgroundColor:[UIColor clearColor]];
_password.placeholder=[NSString stringWithFormat:@"Password"];
_password.layer.cornerRadius=5.0;
[_background addSubview:_password];

又变好看了一点,不过还是少了点什么东西,对了,中间还少了一条分割线,这就是为什么要新建一个UIView了,马上要用到了他的绘图方法

修改一下方法

- (void)drawRect:(CGRect)rect {
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context,0.2);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 5, 50);
CGContextAddLineToPoint(context,self.frame.size.width-5, 50);
CGContextClosePath(context);
[[UIColor grayColor] setStroke];
CGContextStrokePath(context); }

再看效果

就这样,一个简单的登录界面就完成了

总结:

1.这个登录界面用到的东西不是很多,主要也就是主要在设计这一块。

2.最后用到了绘图的方法。主要步骤分为以下几点:

   //获取绘图上下文
CGContextRef context=UIGraphicsGetCurrentContext(); //设置粗细
CGContextSetLineWidth(context,0.2); //开始绘图
CGContextBeginPath(context); //移动到开始绘图点
CGContextMoveToPoint(context, 5, 50); //移动到第二个点
CGContextAddLineToPoint(context,self.frame.size.width-5, 50); //关闭路径
CGContextClosePath(context); //设置颜色
[[UIColor grayColor] setStroke];
//绘图
CGContextStrokePath(context);

以上。

IOS制作一个漂亮的登录界面的更多相关文章

  1. CSS样式案例(2)-制作一个简单的登录界面

    首先来张完工的效果图. 一.html文件如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  2. 使用CSS3 制作一个material-design 风格登录界面

    心血来潮,想学学 material design 的设计风格,就尝试完成了一个登录页面制作. 这是整体效果. 感觉还不错吧,结尾会附上代码 在编写的过程中,没有使用任何图片或者字体图标,全部使用css ...

  3. 小强的HTML5移动开发之路(5)——制作一个漂亮的视频播放器

    来自:http://blog.csdn.net/dawanganban/article/details/17679069 在前面几篇文章中介绍了HTML5的特点和需要掌握的基础知识,下面我们开始真正的 ...

  4. 用 Swift 制作一个漂亮的汉堡按钮过渡动画

    汉堡按钮在界面设计中已经是老生常谈了,但是当我在dribbble看到这个漂亮的过渡动画时,我决定试试用代码实现它.   这是 CreativeDash team 的原型图: 你可能已经注意到了,汉堡顶 ...

  5. iOS 创建一个在退出登录时可以销毁的单例

    一.单例简介 单例模式是在软件开发中经常用的一种模式.单例模式通俗的理解是,在整个软件生命周期内,一个类只能有一个实例对象存在. 二.遇到的问题 在平时开发使用单例的过程中,有时候会有这样的需求,在用 ...

  6. iOS:制作一个简易的计算器

    初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有问题的,不是很完美,可能还有一些bug,再接再厉. // // ViewController.m // 计算器 // // Created ...

  7. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(4)- 漂亮的登录界面

    前言 这一讲,给大家添加登录页面 实现 添加Login的Index视图 @{ Layout = null; } <!DOCTYPE html> <html class="l ...

  8. android --一个简单的登录界面

    MainActivity.java package com.example.empty_project; import androidx.appcompat.app.AppCompatActivity ...

  9. css3制作一个漂亮的按钮

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAAA4CAIAAAAO41POAAAGWklEQVRogeWabWwTdRzH/8EwMb6Q69

随机推荐

  1. Vagrant 集群的部署

    使用Vagrant部署集群 一.运行多个虚拟机 我们通过配置Vagrantfile配置两个虚拟机--web服务器和数据库服务器. Vagrant::configure("2") d ...

  2. Java 中的泛型详解-Java编程思想

    Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...

  3. 批量更新数据小心SQL触发器的陷阱

    批量更新数据时候,Inserted和Deleted临时表也是批量的,但触发器只会调用执行一次!两个概念千万不要弄混淆! 错误的理解:例如:创建在A表上创建了一个Update触发器,里面写的是Updat ...

  4. Firemonkey的旁门左道[四]

    做开发,就是发现问题,解决问题,又发现问题...周而复始的循环 下面又应该是Firemonkey下的bug. 官方文档中描述: Using the FireMonkey TMenuBar's OSMe ...

  5. 关于 Head First SQL 中文版

    我想谈谈 我对于Head  First  SQL  中文版的一些看法 事实上关于我翻译的这个Head  First  SQL 中文版..我自觉得:的确翻译得非常烂.. 和翻译Head  First  ...

  6. Java的容器小结

    1. 各个类与接口的关系:

  7. Google开发规范

    v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成     头文件   ...

  8. Android(java)学习笔记245:ContentProvider使用(银行数据库创建和增删改查的案例)

    1. Android的四大组件: (1)Activity  用户交互的UI界面 (2)Service  后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...

  9. Android带参数链接请求服务器

    public void taste() { //设默认值 SharedPreferences.Editor editor = this.getSharedPreferences("setti ...

  10. 1_Linux_目录简介

    1. Linux中所以内容以文件形式保存,包括硬件,所以在用命令行配置文件时,该配置仅仅是临时生效.   2. Linux不靠扩展名区分类型,而是靠文件权限.之所以有扩展名是为了便于管理. .rpm二 ...