//

//  LKTitleBtn.m

//  01-彩票

//

//  Created by Lenny  on 3/17/15.

//  Copyright (c) 2015 Lenny. All rights reserved.

//

#import "LKTitleBtn.h"

#import <Availability.h>

@interface LKTitleBtn ()

@property(nonatomic,strong) UIFont *
myFont;

@end

@implementation LKTitleBtn

-(id)initWithCoder:(NSCoder *)aDecoder

{

if (self = [super initWithCoder:aDecoder])

{

[self setup];

}

return self;

}

-(instancetype)initWithFrame:(CGRect)frame

{

if (self = [super initWithFrame:frame])
{

[self setup];

}

return self;

}

-(void)setup

{

//    记录button标题的字体

self.myFont = [UIFont systemFontOfSize:15];

//    设置标题的字体

self.titleLabel.font = self.myFont;

//    设置button的图片显示的内容默觉得拉伸不是居中

self.imageView.contentMode = UIViewContentModeCenter;

}

//用于返回button上标题的位置,传入button的rect

-(CGRect)titleRectForContentRect:(CGRect)contentRect

{

CGFloat titleX = 0;

CGFloat titleY = 0;

CGFloat titleW = 0;

CGFloat titleH = contentRect.size.height;

//    获取button上的字体 1

[self titleForState:UIControlStateNormal];

//    获取button上的字体2

NSString * title = self.currentTitle;//建议使用这种方法 这种方法获得的是不论什么状态下的title

CGSize maxSize = CGSizeMake(MAXFLOAT, MAXFLOAT);

NSMutableDictionary * md = [NSMutableDictionary dictionary];

// 死循环的原因是self.titleLabel须要訪问titleLabel, 而self.titleLabel又须要调用当前方法获取title的范围, 全部死循环

//    md[NSFontAttributeName] = self.titleLabel.font;

//    NSLog(@"%@", self.myFont);

md[NSFontAttributeName] = self.myFont;

//    计算文字的范围

// 推断是否是xcode5 , 假设是就编译一下代码, 假设不是就不编译

#ifdef __IPHONE_7_0

if (([[UIDevice currentDevice].systemVersion doubleValue]
>= 7.0)) {

CGRect titleRect = [title boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:md context:nil];

titleW = titleRect.size.width;

}else{

CGSize titleSize = [title sizeWithFont:self.myFont];//过时的方法

titleW  = titleSize.width;

}

#else

// XCODE4

CGSize titleSize = [title sizeWithFont:self.myFont];

titleW = titleSize.width;

#endif

return CGRectMake(titleX, titleY, titleW, titleH);

}

-(CGRect)imageRectForContentRect:(CGRect)contentRect{

CGFloat imageY = 0;

CGFloat imageH = contentRect.size.height;

CGFloat imageW = 16;//图片的宽度

//    图片的X = button的宽度 - 图片的宽度

CGFloat imageX= contentRect.size.width -
imageW;

return CGRectMake(imageX,
imageY, imageW, imageH);

}

不使用系统自带的button的更多相关文章

  1. android学习笔记50——SQLiteOpenHelper、android实现系统自带样式

    SQLiteOpenHelper SQLiteOpenHelper是android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新. 一般的用法是创建SQLiteOpenHelper的子 ...

  2. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:

  3. android开发中系统自带语音模块的使用

    android开发中系统自带语音模块的使用需求:项目中需要添加语音搜索模块,增加用户体验解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求.这个问题很好解决,网上能找到很 ...

  4. (转)Android调用系统自带的文件管理器进行文件选择并获得路径

    Android区别于iOS的沙盒模式,可以通过文件浏览器浏览本地的存储器.Android API也提供了相应的接口. 基本思路,先通过Android API调用系统自带的文件浏览器选取文件获得URI, ...

  5. ShareIntentUtil【调用系统自带的分享的工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据参考资料的文章,整理了调用系统自带分享的工具类(实现了适配7.0FileProvider的功能),需要搭配<Android ...

  6. 还在用系统自带的?那你那就OUT了!

    相信如今的APP10个里面有九个是有Tabbar的,可是非常多人甚是非常多公司都在用系统自带的tabbar.当然这也不是不能够,并且项目中就那几行代码.效果又一样. 可是,别忘了另一个可是.然并卵.这 ...

  7. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

    前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...

  8. Notepad2替代系统自带的记事本

    事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...

  9. 如何获取安卓系统自带应用的package和activity

    之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...

随机推荐

  1. 自己写的_top、_parent以及对iframe和frameset的理解

    iframe可以写在<body>标签里,如<body><iframe src="xxx"  name="xxx" style=&q ...

  2. 开启远程MySQL

    安装完MySQL,由于安全原因默认是没有赋予用户远程权限的,所以第一步要首先赋予用户对应的权限 一  授权 mysql> mysql -u用户名 [-pIp地址] -p #登录 mysql> ...

  3. Linux通信之同步阻塞模式

    [参考]韦东山 教学笔记 1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作.常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初 ...

  4. jquery Contains 实现查询

    var filter = $(this).val(); var filterResult = $(this).find('h2:Contains(' + filter + ')'); if (filt ...

  5. mount 命令总结

    配置CnetOS 7.4 本地yum源,记录下遇到的ISO镜像挂载问题,使用 blkid 命令可以查看设备的UUID.Label.文件系统类型(iso镜像文件系统类型iso9660) [root@lo ...

  6. <meta http-equiv="refresh" content="3"> 什么意思?

    <meta http-equiv="refresh" content="3"> 什么意思?平常都是<meta http-equiv=" ...

  7. 阿里云直播鉴权java代码示例

    段时间公司需要做直播服务,所以就研究了一下阿里云的直播,在直播里面,最重要的就是url的鉴权操作(验证推流或者拉流的有效性),在网上找了很多代码,都没有发现java的demo,所以就写篇播客记录一下, ...

  8. maven将jar包添加到本地仓库

    mvn install:install-file -Dfile=jar包本地路径 -DgroupId=groupID -DartifactId=ifactId -Dversion=版本 -Dpacka ...

  9. python 遍历xml所有节点

    1.xml文件 2.代码 #coding:utf-8 import xml import xml.etree.ElementTree as ET """ 实现从xml文件 ...

  10. ActionChains定位元素

    ActionChains UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,Selenium给我们提供了Ac ...