ios基础篇(二十四)—— 文字、图片的绘制及其自定义Button
这篇文章我们主要来拿官方的控件来研究一下,我们来仿照官方的控件,自己来实现它提供的控件;
首先来看看基本的图片与文字的绘制,很简单。
一、imageView
所有的视图都是继承自UIView,所以我们的ImageView也是继承自UIView,我们自己写的用My开头,以便于区分。
1、对于ImageView,我们需要绘制,需要提供图片资源,所以在我们的头文件里我们这样定义:
2、回到MyImageView.m文件里,找到绘制函数:
嗯,没错这样就写完了。。。
接下来回到ViewController.m里试试我们自己写的控件吧!
3、在ViewController.m中引入我们刚才自定义的View,
@interface ViewController (){ MyImageView *imageView; } @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
imageView = [[MyImageView alloc] initWithFrame:(CGRect){,,,}];
imageView.image = [UIImage imageNamed:@"u=1940733206,3299197276&fm=21&gp=0"];
[self.view addSubview:imageView]; }
看看效果:
还不错吧,是不是和苹果官方提供的控件一样好用。。
二、Label
Label的绘制会稍微复杂一点,
首先还是创建我们自己的View(MyLabel)。
1、打开MyLabel.h文件,
设置我们在UILabel控件中常用的属性,这里只写几个举例说明一下,具体用到时候根据需要设置。
2、回到MyLabel.m文件,
#import "MyLabel.h" @implementation MyLabel // Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
paragraphStyle.alignment = NSTextAlignmentLeft; NSDictionary *dic = @{NSParagraphStyleAttributeName:paragraphStyle,
NSForegroundColorAttributeName:_textColor,//设置字体颜色
NSBackgroundColorAttributeName:_backgroundColor,//设置背景色
NSFontAttributeName:_font,//设置字体
NSStrokeWidthAttributeName:@,//设置描边宽度,这样就能使文字空心
NSStrokeColorAttributeName:[UIColor greenColor],//设置文字描边颜色
};
[_text drawInRect:(CGRect){,,,} withAttributes:dic]; }
3、回到ViewController.m文件,
引入MyLabel.h文件,
@interface ViewController (){ MyImageView *imageView;
MyLabel *label;
} @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
imageView = [[MyImageView alloc] initWithFrame:(CGRect){,,,}];
imageView.image = [UIImage imageNamed:@"u=1940733206,3299197276&fm=21&gp=0"];
[self.view addSubview:imageView]; label = [[MyLabel alloc] initWithFrame:(CGRect){,,,}];
label.text = @"Hello,World!";
label.backgroundColor = [UIColor whiteColor];
label.textColor = [UIColor orangeColor];
label.font = [UIFont systemFontOfSize:];
[self.view addSubview:label];
}
效果图:
三、自定义Button
首先新建View(MyButton),继承自UIView,为什么不直接继承自UIControl?因为我们要自己添加手势!
1、打开MyButton.h文件,添加方法
#import <UIKit/UIKit.h> @interface MyButton : UIView - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;//添加手势
- (void)setImage:(UIImage*)image forState:(UIControlState)state;//设置button图片
- (void)setTitle:(NSString*)title forState:(UIControlState)state;//设置文字 @end
2、打开MyButton.m文件,
声明自定义属性,及其初始化方法,
//
// MyButton.m
// Draw
//
// Created by Oran Wu on 15-12-30.
// Copyright (c) 2015年 Xinxin. All rights reserved.
// #import "MyButton.h" @interface MyButton (){ UIControlEvents controlEvent; UIImage *_buttonImage;
UIControlState controlState; NSString *_buttonTitle; UIBezierPath *buttonPath;
}
@property(nonatomic,weak)id targate;
@property(nonatomic,assign)SEL buttonAction; @end @implementation MyButton - (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
}
return self;
} - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents{ self.targate = target;
self.buttonAction = action;
controlEvent = controlEvents; } - (void)setImage:(UIImage *)image forState:(UIControlState)state{
_buttonImage = image;
controlState = state;
[self setNeedsDisplay];
} - (void)setTitle:(NSString *)title forState:(UIControlState)state{
_buttonTitle = title;
controlState = state;
[self setNeedsDisplay];
}
3、绘制Button,添加点击事件;
- (void)drawRect:(CGRect)rect {
// Drawing code
UIColor *color = [UIColor colorWithRed:0.3 green:0.7 blue:0.6 alpha:0.5];
[color set]; buttonPath = [UIBezierPath bezierPathWithRoundedRect:(CGRect){,,,} cornerRadius:];
buttonPath.lineWidth = ;
[buttonPath fill]; //设置图片
[_buttonImage drawInRect:(CGRect){,,,}]; //设置文字
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
paragraphStyle.alignment = NSTextAlignmentCenter; NSDictionary *dic = @{NSParagraphStyleAttributeName:paragraphStyle,
NSForegroundColorAttributeName:[UIColor redColor],//设置字体颜色
NSBackgroundColorAttributeName:[UIColor clearColor],//设置背景色
NSFontAttributeName:[UIFont systemFontOfSize:],//设置字体
NSStrokeWidthAttributeName:@,//设置描边宽度,这样就能使文字空心
NSStrokeColorAttributeName:[UIColor purpleColor],//设置文字描边颜色
};
[_buttonTitle drawInRect:(CGRect){,,,} withAttributes:dic]; } //开始触摸
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//按需求设置点击状态
} //结束触摸
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ if (controlEvent==UIControlEventTouchUpInside) { [self.targate performSelector:self.buttonAction withObject:self]; } }
4、返回ViewController.m文件试试我们自定义的Button;
同样,引入头文件,
在- (void)viewDidLoad;方法中写入以下代码(这里设置了Button的背景颜色,就没有设置图片,如果有需要把文字加在图片上面也是可以的);
button = [[MyButton alloc] initWithFrame:(CGRect){,,,}];
[button setTitle:@"myButton" forState:UIControlStateNormal];
//[button setImage:[UIImage imageNamed:@"u=38807319,2604887842&fm=15&gp=0"] forState:UIControlStateNormal];
[self.view addSubview:button];
[button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
效果图:
Button点击动作响应:
- (void)buttonAction{
//设置改变文字
[button setTitle:@"Change" forState:UIControlStateNormal]; }
效果图:
ios基础篇(二十四)—— 文字、图片的绘制及其自定义Button的更多相关文章
- ios基础篇(十四)——UITableView(二)属性及基本用法
上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法. 一.属性 1.frame:设置控件的尺寸和大小 2.backg ...
- ios基础篇(十二)——UINavgationController的使用(三)ToolBar
UIToolBar存在于UINavigationController导航栏控制器中,而且默认被隐藏:设置UINavigationController的toolbarHidden属性可显示UIToolB ...
- ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别
一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能. ...
- ios基础篇(十六)——UIWebView的基本使用
UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档等.UIWebView是一个混合体,具体的功能控件内置的,实现一些基本的功能.UIWebView可以查看Html网页,pdf文件,do ...
- iOS基础篇(十五)——UIScrollView的基本用法
滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图. 一.基本属性 1.CGSize contentSize :设置UIScrollView的滚动范围 2.CGPoint co ...
- Py修行路 python基础 (二十四)socket编程
socket编程 一.客户端/服务端架构 客户端/服务端架构 即C/S架构,包括:1.硬件C/S架构,2.软件C/S架构. 互联网中处处都是C/S架构,学习socket 就是为了完成C/S架构的开发. ...
- ioS基础篇(十九)——UIResponder简析
UIResponder类定义了对象相应和控制事件的接口,他是UIApplication.UIView的超类,这类的实例通常被称为应答对象. 一.Responder对象 在iOS系统中,能够响应并处理事 ...
- JavaEE基础(二十四)/多线程
1.多线程(多线程的引入) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给 ...
- ios基础篇(十)——UINavgationController的使用(一)UIBarButtonItem的添加
UINavigationController又被成为导航控制器,继承自UIViewController,以栈的方式管理所控制的视图控制器,下面就详细说一下UINavigationController的 ...
随机推荐
- Cocos2dx3.11.1Android播放视频,后台 黑屏,无法记忆播放bug修改
/* * Copyright (C) 2006 The Android Open Source Project * Copyright (c) 2014 Chukong Technologies In ...
- 【Qt学习笔记】窗口部件整理
关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着 ...
- [转]让窗体不显示在Alt+Tab中
public class MyForm : Form { protected override CreateParams CreateParams { get { const int WS_EX_AP ...
- grep命令
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep ...
- Xcode8 适配iOS10时遇见的一些问题
1.证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书.建议大家勾选这个Automatically manage signing(Ps.但是在bea ...
- XFire完整入门教程
网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可 ...
- tomact的work目录
1. 用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的j ...
- Extjs MVC学习随笔01
Extjs Mvc模式下的整个MVC框架体系即下图: 包含了Controller(实现方法层),Store(数据来源管理层),View(页面布局层).之所以用MVC我想是因为减轻针对某一页面的单一的J ...
- 关于面试别问及Spring如何回答思路总结!
首先要知道 Spring两大核心IOC和AOP(Java轻量级业务层框架Spring两大核心IOC和AOP原理) IOC: 1.从Java最基本的创建对象开始 如Interface Driven De ...
- [CF752E]Santa Claus and Tangerines(二分答案,dp)
题目链接:http://codeforces.com/contest/752/problem/E 题意:给n个橘子,每个橘子a(i)片,要分给k个人,问每个人最多分多少片.每个橘子每次对半分,偶数的话 ...