文档章节

iOS UIButton图片文字位置随意放置

记忆淡忘
 记忆淡忘
发布于 2017/05/08 20:37
字数 224
阅读 8
收藏 0
点赞 0
评论 0

通过继承UIButton 重写LayoutSubViews实现 

.h文件如下

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSInteger, UIMyDefindButtonImageType) {

    

    UIMyDefindButtonImageTypeNormal = 0,//系统默认类型 左图片 右文字

    

    UIMyDefindButtonImageTypeTop,//上图片 下文字

    

    UIMyDefindButtonImageTypeRight,//右图片 左文字

    

    UIMyDefindButtonImageTypeBottom//下图片 上文字

    

};

@interface MyDefindButton : UIButton

 

@property (nonatomic,assign) UIMyDefindButtonImageType myDefindType;

 

@end

 

.m文件如下

#import "MyDefindButton.h"

 

#define Jianju 2 //图片和文字之间的间距

 

@implementation MyDefindButton

 

- (void)layoutSubviews{

    

    [super layoutSubviews];

    

    CGRect titleF = self.titleLabel.frame;

    CGRect imageF = self.imageView.frame;

    

    switch (self.myDefindType) {

        case UIMyDefindButtonImageTypeNormal:

            

            break;

            

        case UIMyDefindButtonImageTypeTop:{

            

            CGRect newImageRect;

            

            newImageRect.origin.x = self.width/2-(imageF.size.width/2);

            

            newImageRect.origin.y = self.height/2 - ((imageF.size.height+Jianju+titleF.size.height)/2);

            

            newImageRect.size.width = imageF.size.width;

            

            newImageRect.size.height = imageF.size.height;

            

            self.imageView.frame = newImageRect;

            

            self.titleLabel.frame = CGRectMake(self.width/2-(titleF.size.width/2), self.imageView.bottom+Jianju, titleF.size.width, titleF.size.height);

            

        }

            break;

        case UIMyDefindButtonImageTypeRight:{

            

            titleF.origin.x = self.width/2-((titleF.size.width + imageF.size.width+Jianju)/2);

            

            self.titleLabel.frame = titleF;

            

            imageF.origin.x = CGRectGetMaxX(titleF) + 3;

            self.imageView.frame = imageF;

            

        }

            break;

            

        case UIMyDefindButtonImageTypeBottom:{

            

            CGRect newTitleRect;

            

            newTitleRect.origin.x = self.width/2-(titleF.size.width/2);

            

            newTitleRect.origin.y = self.height/2 - ((imageF.size.height+Jianju+titleF.size.height)/2);

            

            newTitleRect.size.width = titleF.size.width;

            

            newTitleRect.size.height = titleF.size.height;

            

            self.titleLabel.frame = newTitleRect;

            

            self.imageView.frame = CGRectMake(self.width/2-(imageF.size.width/2), self.titleLabel.bottom+Jianju, imageF.size.width, imageF.size.height);

            

        }

            break;

            

        default:

            break;

    }

    

}

 

/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

}

*/

 

@end

 

© 著作权归作者所有

共有 人打赏支持
记忆淡忘
粉丝 6
博文 47
码字总数 6967
作品 0
长沙
经典Win95风格的iOS UI 组件集 ClassicKit

ClassicKit是 Windows 95 经典风格的iOS 开源UI 组件集。图标,窗框的资源都来自Windows 95。每个组件都像 UIKit 的对应组件一样使用,例如,CKButton 像 UIButton 一样响应手势事件。同时这...

marsdream ⋅ 05/21 ⋅ 0

用UITextView撸一个顺畅的评论输入框

对比UITextField 继承关系: UITextField继承自UIControl,UITextView继承自UIScrollView; 输入行数 UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入 Placeholder UI...

STzen ⋅ 05/10 ⋅ 0

怀旧,开源项目将 Windows 95 画风带到 iOS 上

开发者天马行空的想法总是能够给人带来惊喜,日前有开发者写了一个适用于 iOS 的 Windows 95 经典风格 UI 组件集 ClassicKit,并将其开源在 GitHub 上。 该项目将 Windows 95 的风格带入了 ...

雨田桑 ⋅ 05/17 ⋅ 8

iOS 端富文本控件 - NudeIn

NudeIn NudeIn 是一个基于 UITextView ,书写风格类似于 masonry 的 iOS 端富文本控件,它采用优雅的声明式方法定义富文本控件,和编程式的不同,它所需的代码量相当短,且非常直观易用。 Us...

HJ-CAI ⋅ 06/03 ⋅ 0

【转载】NGUI UILabel 文字破碎

项目使用NGUI,最近碰到 Loading界面的提示文字破碎的Bug。 参考了以下文章 转自http://blog.csdn.net/huutu http://www.liveslives.com 下面先来了解一下为什么会出现这种问题。 需要了解的...

linda012518 ⋅ 05/09 ⋅ 0

iOS关于换肤和夜间模式的一些思考

介绍 好久没写文章了,正好最近在研究换肤,所以将最近的心得和体会与大家分享一下。 iOS换肤的方式比较单一,查找了很多资料,发现主流的方式有如下两种: } 自己的想法 首先我们应该明确需...

shenglanya ⋅ 05/14 ⋅ 0

蛇和梯子游戏,分别用oc和swift开发

蛇和梯子游戏,分别用oc和swift开发 心血来潮想学学swift,看了一下教程和开发文档,发现其实swift的很多类都是基于oc的,比如swift的UIButton是基于oc的UIButton。所以我想其实学过oc再学s...

weixin_42012181 ⋅ 04/18 ⋅ 0

Swift中优雅的为UIButton添加链式的Block点击事件

UIButton是基于 action - target 的事件机制处理点击事件的。通常,如果我们需要添加一个 UIButton 的点击事件的时候,一般会这么做: 当然,可能对于同一个 button 我们可能会添加不止一个状...

BennyLoo ⋅ 04/14 ⋅ 0

iOS使用SizeClass适配不同屏幕

1、介绍图 2、不同屏幕、方向对应的类型 (wAny hAny 是所有类型) 2.1、iPhone4S/SE/6/X 2.2、iPhone6Plus 2.3、iPad(分全屏、split view) 3、如何选中各种类型 3.1、所有类型 如下图,仅...

weixin_42003092 ⋅ 04/18 ⋅ 0

UIButton 背景色渐变动画

UIButton 背景色渐变动画 项目有个需求需要UIButton上的背景色是渐变动画的效果,如下。 实现 CAGradientLayer 用于实现渐变效果,CABasicAnimation用于对Layer做动画 源码:https://github.c...

qin_shi ⋅ 04/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 41分钟前 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 46分钟前 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 55分钟前 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 56分钟前 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 57分钟前 ⋅ 0

React Native & Weex 区别

JS引擎 Weex使用V8, React native使用JSCore JS开发框架 ( Js Framework ) Weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。 ReactNative使用...

东东笔记 ⋅ 今天 ⋅ 1

UIkit 分页组件动态加载简单实现

1. 问题描述 使用过UIkit分页组件的都清楚,UIkit的分页不能动态刷新数据,也就是不能在点击下一页的时候,动态从后台加载数据,并且刷新页数以及该页数上的数据,下面是一个简单实现,没有做...

影狼 ⋅ 今天 ⋅ 0

Mobx入门之三:Provider && inject

上一节中<App/>组件传递状态temperatures给children -- <TemperatureInput />,如果组建是一个tree, 那么属性的传递则会非常繁琐。redux使用Provider给子组件提供store, connect将子组件和s...

pengqinmm ⋅ 今天 ⋅ 0

魔兽世界 7.0版本 S23/S24/S25全职业普通+精锐套

  死亡骑士   (联盟)   (部落)   (精锐)   恶魔猎手   (联盟)   (部落)   (精锐)   德鲁伊   (联盟)   (部落)   (精锐)   猎人   (联盟) ...

wangchen1999 ⋅ 今天 ⋅ 0

maven顶级pom和子pom的版本号批量修改

当一个版本发布,新起一个版本时,我们只需要手动修改一下项目中pom.xml的版本号就可以了。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就显得费时费力又繁琐了。还好,m...

ArlenXu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部