Ios“巷自己的定义View和Android类别似

在.h文件设置了他的一些财产。方法

在.m文件中实现

.h文件

#import <UIKit/UIKit.h>

CGPoint CGRectGetCenter(CGRect rect);

CGRect  CGRectMoveToCenter(CGRect rect,
CGPoint center);

@interface UIView (ViewFrameGeometry)

@property
CGPoint origin;

@property CGSize size;

@property (readonly)
CGPoint bottomLeft;

@property (readonly)
CGPoint bottomRight;

@property (readonly)
CGPoint topRight;

@property
CGFloat height;

@property CGFloat width;

@property CGFloat top;

@property CGFloat left;

@property
CGFloat bottom;

@property CGFloat right;

- (void) moveBy: (CGPoint) delta;

- (void) scaleBy: (CGFloat) scaleFactor;

- (void) fitInSize: (CGSize) aSize;

@end

.m文件

#import "UIViewExt.h"

CGPoint CGRectGetCenter(CGRect rect)

{

CGPoint pt;

pt.x =
CGRectGetMidX(rect);

pt.y =
CGRectGetMidY(rect);

return pt;

}

CGRect CGRectMoveToCenter(CGRect rect,
CGPoint center)

{

CGRect newrect = CGRectZero;

newrect.origin.x = center.x-CGRectGetMidX(rect);

newrect.origin.y = center.y-CGRectGetMidY(rect);

newrect.size = rect.size;

return newrect;

}

@implementation UIView (ViewGeometry)

// Retrieve and set the origin

- (CGPoint) origin

{

return
self.frame.origin;

}

- (void) setOrigin: (CGPoint) aPoint

{

CGRect newframe =
self.frame;

newframe.origin = aPoint;

self.frame = newframe;

}

// Retrieve and set the size

- (CGSize) size

{

return
self.frame.size;

}

- (void) setSize: (CGSize) aSize

{

CGRect newframe =
self.frame;

newframe.size = aSize;

self.frame = newframe;

}

// Query other frame locations

- (CGPoint) bottomRight

{

CGFloat x =
self.frame.origin.x +
self.frame.size.width;

CGFloat y =
self.frame.origin.y +
self.frame.size.height;

return
CGPointMake(x, y);

}

- (CGPoint) bottomLeft

{

CGFloat x =
self.frame.origin.x;

CGFloat y =
self.frame.origin.y +
self.frame.size.height;

return
CGPointMake(x, y);

}

- (CGPoint) topRight

{

CGFloat x =
self.frame.origin.x +
self.frame.size.width;

CGFloat y =
self.frame.origin.y;

return
CGPointMake(x, y);

}

// Retrieve and set height, width, top, bottom, left, right

- (CGFloat) height

{

return
self.frame.size.height;

}

- (void) setHeight: (CGFloat) newheight

{

CGRect newframe =
self.frame;

newframe.size.height = newheight;

self.frame = newframe;

}

- (CGFloat) width

{

return
self.frame.size.width;

}

- (void) setWidth: (CGFloat) newwidth

{

CGRect newframe =
self.frame;

newframe.size.width = newwidth;

self.frame = newframe;

}

- (CGFloat) top

{

return
self.frame.origin.y;

}

- (void) setTop: (CGFloat) newtop

{

CGRect newframe =
self.frame;

newframe.origin.y = newtop;

self.frame = newframe;

}

- (CGFloat) left

{

return
self.frame.origin.x;

}

- (void) setLeft: (CGFloat) newleft

{

CGRect newframe =
self.frame;

newframe.origin.x = newleft;

self.frame = newframe;

}

- (CGFloat) bottom

{

return
self.frame.origin.y +
self.frame.size.height;

}

- (void) setBottom: (CGFloat) newbottom

{

CGRect newframe =
self.frame;

newframe.origin.y = newbottom -
self.frame.size.height;

self.frame = newframe;

}

- (CGFloat) right

{

return
self.frame.origin.x +
self.frame.size.width;

}

- (void) setRight: (CGFloat) newright

{

CGFloat delta = newright - (self.frame.origin.x +
self.frame.size.width);

CGRect newframe =
self.frame;

newframe.origin.x += delta ;

self.frame = newframe;

}

// Move via offset

- (void) moveBy: (CGPoint) delta

{

CGPoint newcenter =
self.center;

newcenter.x += delta.x;

newcenter.y += delta.y;

self.center = newcenter;

}

// Scaling

- (void) scaleBy: (CGFloat) scaleFactor

{

CGRect newframe =
self.frame;

newframe.size.width *= scaleFactor;

newframe.size.height *= scaleFactor;

self.frame = newframe;

}

// Ensure that both dimensions fit within the given size by scaling down

- (void) fitInSize: (CGSize) aSize

{

CGFloat scale;

CGRect newframe =
self.frame;

if (newframe.size.height && (newframe.size.height > aSize.height))

{

scale = aSize.height / newframe.size.height;

newframe.size.width *= scale;

newframe.size.height *= scale;

}

if (newframe.size.width && (newframe.size.width >= aSize.width))

{

scale = aSize.width / newframe.size.width;

newframe.size.width *= scale;

newframe.size.height *= scale;

}

self.frame = newframe;

}

@end

版权声明:本文博客原创文章。博客,未经同意,不得转载。

它们的定义View的更多相关文章

  1. Android 它们的定义View (一)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 非常Android入门程序员AndroidView.可能都是比較恐 ...

  2. Android 它们的定义View它BounceProgressBar

    转载请注明出处:http://blog.csdn.net/bbld_/article/details/41246247 [Rocko's blog] 之前几天下载了非常久没用了的桌面版酷狗来用用的时候 ...

  3. Android 自己定义View (二) 进阶

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自己定义View之旅.前面已经介绍过一个自己定义View的基础 ...

  4. 【android自己定义控件】自己定义View属性

    1.自己定义View的属性 2.在View的构造方法中获得我们自己定义的属性 3.重写onMesure 4.重写onDraw 3这个步骤不是必须,当然了大部分情况下还是须要重写的. 1.自己定义Vie ...

  5. Qt--自定义View

    这是上一篇文章的续篇,关于自定义View. 多个View内部可以映射到同一个数据模型,也可以映射不同的数据结构:可以使用所有数据,也可以只使用部分数据.因为视图层与数据层的分离,操作相对比较灵活. 1 ...

  6. 自己定义View Controller转换动画

    原文链接 : Introduction to Custom View Controller Transitions and Animations 原文作者 : joyce echessa 译文出自 : ...

  7. Android-自定义View前传-View的三大流程-Layout

    Android-自定义View前传-View的三大流程-Layout 参考 <Android开发艺术探索> https://github.com/hongyangAndroid/FlowL ...

  8. 图文剖析自己定义View的绘制(以自己定义滑动button为例)

    自己定义View一直是横在Android开发人员面前的一道坎. 一.View和ViewGroup的关系 从View和ViewGroup的关系来看.ViewGroup继承View. View的子类.多是 ...

  9. 自己定义View Layout过程 - 最易懂的自己定义View原理系列(3)

    前言 自己定义View是Android开发人员必须了解的基础 网上有大量关于自己定义View原理的文章.但存在一些问题:内容不全.思路不清晰.无源代码分析.简单问题复杂化等等 今天,我将全面总结自己定 ...

随机推荐

  1. PDO获取数据的方法fetch()、fetchAll()、setFetchMode()、bindColumn()

    PDO的数据获取方法与其他数据库扩展都非常类似,只要成功执行SELECT查询,都会有结果集对象产生.不管是使用PDO对象中的query()方法,还是使用prepare()和execute()等方法结合 ...

  2. python成长之路9——socket和socketserver

    IPC:进程间通信 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具 ...

  3. C语言新学备忘_1

    #include <stdio.h> //C语言的标准输入 ,输出头文件扩展名为.h的文件称为头文件 //include称为文件包含命令 #include <stdlib.h> ...

  4. WebService开发实例(Axis2实现,无需安装,快速实现)

    曾经做过的项目里涉及Android客户端向服务器发送请求,服务器访问数据库获得数据并返回给Android客户端.当时Android客户端与服务器的通信已经实现,我只负责客户端布局和数据呈现的部分,近日 ...

  5. SiteMesh

    1.导入对SiteMesh.jar的依赖 <dependency>      <groupId>org.sitemesh</groupId>      <ar ...

  6. Java 如何判断一个字符是否是数字或字母

    在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...

  7. Apache 2.2 到 2.4的不同

    1.权限设定方式变更 2.2使用Order Deny / Allow的方式,2.4改用Require apache2.2: Order deny,allowDeny from allapache2.4 ...

  8. LA-3135 - Argus(优先队列)

    3135 - Argus A data stream is a real-time, continuous, ordered sequence of items. Some examples incl ...

  9. DataTable 用linq分组查询

    DataRow drt = null; var tlist = dt.Select("Atmbs LIKE '%" + d["Two_Code"] + &quo ...

  10. 【redis】windows

    官方网站:http://www.redis.io 百度百科:http://baike.baidu.com/view/4595959.htm?fr=aladdin windows下安装redis: 下载 ...