UIView(QMUI_Block)
@interface UIView (QMUI_Block)
/**
在 UIView 的 frame 变化前会调用这个 block,变化途径包括 setFrame:、setBounds:、setCenter:、setTransform:,你可以通过返回一个 rect 来达到修改 frame 的目的,最终执行 [super setFrame:] 时会使用这个 block 的返回值(除了 setTransform: 导致的 frame 变化)。
@param view 当前的 view 本身,方便使用,省去 weak 操作
@param followingFrame setFrame: 的参数 frame,也即即将被修改为的 rect 值
@return 将会真正被使用的 frame 值
@note 仅当 followingFrame 和 self.frame 值不相等时才会被调用
*/
@property(nullable, nonatomic, copy) CGRect (^qmui_frameWillChangeBlock)(__kindof UIView *view, CGRect followingFrame);
/**
在 UIView 的 frame 变化后会调用这个 block,变化途径包括 setFrame:、setBounds:、setCenter:、setTransform:,可用于监听布局的变化,或者在不方便重写 layoutSubviews 时使用这个 block 代替。
@param view 当前的 view 本身,方便使用,省去 weak 操作
@param precedingFrame 修改前的 frame 值
*/
@property(nullable, nonatomic, copy) void (^qmui_frameDidChangeBlock)(__kindof UIView *view, CGRect precedingFrame);
/**
在 UIView 的 layoutSubviews 调用后的下一个 runloop 调用。如果不放到下一个 runloop,直接就调用,会导致先于子类重写的 layoutSubviews 就调用,这样就无法获取到正确的 subviews 的布局。
@param view 当前的 view 本身,方便使用,省去 weak 操作
@note 如果某些 view 重写了 layoutSubviews 但没有调用 super,则这个 block 也不会被调用
*/
@property(nullable, nonatomic, copy) void (^qmui_layoutSubviewsBlock)(__kindof UIView *view);
/**
当 tintColorDidChange 被调用的时候会调用这个 block,就不用重写方法了
@param view 当前的 view 本身,方便使用,省去 weak 操作
*/
@property(nullable, nonatomic, copy) void (^qmui_tintColorDidChangeBlock)(__kindof UIView *view);
/**
当 hitTest:withEvent: 被调用时会调用这个 block,就不用重写方法了
@param point 事件产生的 point
@param event 事件
@param super 的返回结果
*/
@property(nullable, nonatomic, copy) __kindof UIView * (^qmui_hitTestBlock)(CGPoint point, UIEvent *event, __kindof UIView *originalView);
@end
Undocumented
-
在 UIView 的 frame 变化前会调用这个 block,变化途径包括 setFrame:、setBounds:、setCenter:、setTransform:,你可以通过返回一个 rect 来达到修改 frame 的目的,最终执行 [super setFrame:] 时会使用这个 block 的返回值(除了 setTransform: 导致的 frame 变化)。
Note
仅当 followingFrame 和 self.frame 值不相等时才会被调用Declaration
Objective-C
@property (nonatomic, copy, nullable) CGRect (^) (__kindof UIView *_Nonnull, CGRect) qmui_frameWillChangeBlock;
Swift
var qmui_frameWillChangeBlock: ((UIView, CGRect) -> CGRect)? { get set }
Parameters
view
当前的 view 本身,方便使用,省去 weak 操作
followingFrame
setFrame: 的参数 frame,也即即将被修改为的 rect 值
Return Value
将会真正被使用的 frame 值
-
在 UIView 的 frame 变化后会调用这个 block,变化途径包括 setFrame:、setBounds:、setCenter:、setTransform:,可用于监听布局的变化,或者在不方便重写 layoutSubviews 时使用这个 block 代替。
Declaration
Objective-C
@property (nonatomic, copy, nullable) void (^) (__kindof UIView *_Nonnull, CGRect) qmui_frameDidChangeBlock;
Swift
var qmui_frameDidChangeBlock: ((UIView, CGRect) -> Void)? { get set }
Parameters
view
当前的 view 本身,方便使用,省去 weak 操作
precedingFrame
修改前的 frame 值
-
在 UIView 的 layoutSubviews 调用后的下一个 runloop 调用。如果不放到下一个 runloop,直接就调用,会导致先于子类重写的 layoutSubviews 就调用,这样就无法获取到正确的 subviews 的布局。
Note
如果某些 view 重写了 layoutSubviews 但没有调用 super,则这个 block 也不会被调用Declaration
Objective-C
@property (nonatomic, copy, nullable) void (^) (__kindof UIView *_Nonnull) qmui_layoutSubviewsBlock;
Swift
var qmui_layoutSubviewsBlock: ((UIView) -> Void)? { get set }
Parameters
view
当前的 view 本身,方便使用,省去 weak 操作
-
当 tintColorDidChange 被调用的时候会调用这个 block,就不用重写方法了
Declaration
Objective-C
@property (nonatomic, copy, nullable) void (^) (__kindof UIView *_Nonnull) qmui_tintColorDidChangeBlock;
Swift
var qmui_tintColorDidChangeBlock: ((UIView) -> Void)? { get set }
Parameters
view
当前的 view 本身,方便使用,省去 weak 操作
-
当 hitTest:withEvent: 被调用时会调用这个 block,就不用重写方法了
Declaration
Objective-C
@property (nonatomic, copy, nullable) __kindof UIView *_Nonnull (^) (CGPoint, UIEvent *_Nonnull, __kindof UIView *_Nonnull) qmui_hitTestBlock;
Swift
var qmui_hitTestBlock: ((CGPoint, UIEvent, UIView) -> UIView)? { get set }
Parameters
point
事件产生的 point
event
事件
super
的返回结果