iOS 如何自定义控件组件

iOS 自定义控件



分为两个层面来处理
1.UI
2.Event


1.关于UI部分,分为Appearance,Animation

1.1 Appearance是UI界面的构成部分,开发之前需要构思自定义控件的组成元素,可以使用UIView及其子类,CALayer及其子类,还有使用图片替代,或者是使用CoreGraphics描绘

在这需要注意使用:

layoutSubviews方法中定义组成元素的frame信息 //调用组件的layoutIfNeed方法,会调用此方法,而setNeedsLayout不会立即调用此方法,只是将组件标记为需要重新布局如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局
在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view layoutIfNeeded]

layoutSubviews在以下情况下会被调用:
a.init初始化不会触发,但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发
b.addSubview会触发
c.设置view的Frame会触发,当然前提是frame的值设置前后发生了变化
d.滚动一个UIScrollView会触发
e.旋转Screen会触发父UIView上的此方法
f.改变一个UIView大小的时候也会触发父UIView上的此方法

drawRect:方法中使用Core Graphics框架进行渲染 //调用组件的setNeedsDisplay方法,或者是setNeedsDisplayInRect:方法(参数不能是0),会调用此方法

sizeThatFits:方法是返回最终控件组件的size信息   //调用组件的sizeToFit,会调用此方法

以上方法的优先级sizeThatFits:>layoutSubviews>drawRect:


1.2 Animation 是控件的动画效果部分,使用Core Animation框架或者是组成部分自带的动画效果都是可以的


2.关于Event部分,iOS的系统中支持的Event类型是Touch,Motion,Press,Remote-Control

每一类型的事件都有delegate方法去处理,在设计自定义控件的时候,想好控件组件需要处理的事件类型

接下来要说的是,在设计控件组件的时候,需要选择继承的父类,UIKit框架中的继承关系如下图:


1.选择继承UIResponder,需要实现上面提到的事件处理的方法,例如Touch事件:The primary event-handling methods for touches are touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:, and touchesCancelled:withEvent:.

在这需要注意使用:

 canPerformAction:withSender:

Requests the receiving responder to enable or disable the specified command in the user interface.

   targetForAction:withSender:

Returns the target object that responds to an action.

An object encapsulating a user activity supported by this responder.




2.选择继承UIControl及其子类,此类使用了 Target-Action机制,很方便为控件组件添加 UIControlEvents 类型的事件与交互,具体操作:When adding an action method to a control, you specify both the action method and an object that defines that method to the addTarget:action:forControlEvents:method

在这需要注意使用:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值