您的位置:首页 > 产品设计 > UI/UE

UIControl源码分析

2015-11-23 15:52 513 查看
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {

UIControlEventTouchDown = 1 << 0, // on all touch downs

UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns (tap count > 1)

UIControlEventTouchDragInside = 1 << 2,

UIControlEventTouchDragOutside = 1 << 3,

UIControlEventTouchDragEnter = 1 << 4,

UIControlEventTouchDragExit = 1 << 5,

UIControlEventTouchUpInside = 1 << 6,

UIControlEventTouchUpOutside = 1 << 7,

UIControlEventTouchCancel = 1 << 8,

UIControlEventValueChanged = 1 << 12, // sliders, etc.

UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc.

UIControlEventEditingDidBegin = 1 << 16, // UITextField

UIControlEventEditingChanged = 1 << 17,

UIControlEventEditingDidEnd = 1 << 18,

UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing

UIControlEventAllTouchEvents = 0x00000FFF, // for touch events

UIControlEventAllEditingEvents = 0x000F0000, // for UITextField

UIControlEventApplicationReserved = 0x0F000000, // range available for application use

UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use

UIControlEventAllEvents = 0xFFFFFFFF

};

UIControlEvents一般在addTarget方法中使用,一般都使用TouchUpInside方法来表示单击事件。

typedef NS_ENUM(NSInteger, UIControlContentVerticalAlignment) {

UIControlContentVerticalAlignmentCenter = 0,

UIControlContentVerticalAlignmentTop = 1,

UIControlContentVerticalAlignmentBottom = 2,

UIControlContentVerticalAlignmentFill = 3,

};

typedef NS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {

UIControlContentHorizontalAlignmentCenter = 0,

UIControlContentHorizontalAlignmentLeft = 1,

UIControlContentHorizontalAlignmentRight = 2,

UIControlContentHorizontalAlignmentFill = 3,

};

内容的位置,很少用到,因为继承自它的空间都有自己的位置方法

typedef NS_OPTIONS(NSUInteger, UIControlState) {

UIControlStateNormal = 0,

UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set

UIControlStateDisabled = 1 << 1,

UIControlStateSelected = 1 << 2, // flag usable by app (see below)

#ifndef SDK_HIDE_TIDE

UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus

#endif

UIControlStateApplication = 0x00FF0000, // additional flags available for application use

UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use

};

控件的状态,高亮之类,可用在button的setimage forstate方法等。

@property(nonatomic,getter=isEnabled) BOOL enabled; // default is YES. if NO, ignores touch events and subclasses may draw differently

@property(nonatomic,getter=isSelected) BOOL selected; // default is NO may be used by some subclasses or by application

@property(nonatomic,getter=isHighlighted) BOOL highlighted; // default is NO. this gets set/cleared automatically when touch enters/exits during tracking and cleared on up

@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment; // how to position content vertically inside control. default is center

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center

@property(nonatomic,readonly) UIControlState state; // could be more than one state (e.g. disabled|selected). synthesized from other flags.

@property(nonatomic,readonly,getter=isTracking) BOOL tracking;

@property(nonatomic,readonly,getter=isTouchInside) BOOL touchInside; // valid during tracking only

这些属性都是字面意思,不难理解

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;

- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event; // touch is sometimes nil if cancelTracking calls through to this.

- (void)cancelTrackingWithEvent:(nullable UIEvent *)event; // event may be nil if cancelled for non-event reasons, e.g. removed from window

这些方法和UIResponder的touchesBegan一系列方法差不多,具体差别我没有找到,如果有知道的希望告知。

- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

// remove the target/action for a set of events. pass in NULL for the action to remove all actions for that target

- (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(UIControlEvents)controlEvents;

这两个方法是最常用的,代码写控件的时候添加点击方法一般就用addTarget

- (NSSet *)allTargets; // set may include NSNull to indicate at least one nil target

- (UIControlEvents)allControlEvents; // list of all events that have at least one action

获得所有的target和ControlEvents
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: