/** 获取到事件中点击的视图 用来判断当前点击 */
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
/** 获取事件event中的触发视图 */
UIView *hitView = [super hitTest:point withEvent:event];
/** 判断是否当前视图 */
if (hitView == self) {
return nil;
} else {
return hitView;
}
}
/** 判断是否是当前视图触发的事件 */
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
return [super pointInside:point withEvent:event];
}
/** 将一个坐标点转换成指定view的坐标 */
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view{
return [super convertPoint:point toView:view];
}
/** 将一个坐标点转换成当前view的坐标 */
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view{
return [super convertPoint:point fromView:view];
}
/** 将一个CGRect转换成指定view的CGRect */
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view{
return [super convertRect:rect toView:view];
}
/** 讲一个CGRect转换成当前view的CGRect */
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view{
return [super convertRect:rect fromView:view];
}
/** 获取适合label内容的CGSize */
- (CGSize)sizeThatFits:(CGSize)size{
return [super sizeThatFits:size];
}
/** 自动设置适合内容的CGSize */
- (void)sizeToFit{
[super sizeToFit];
}
/** 从父视图中移除当前视图 */
- (void)removeFromSuperview{
[super removeFromSuperview];
}
/** 在index层插入一个视图 */
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index{
[super insertSubview:view atIndex:index];
}
/** 交换两个视图的图层 */
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2{
[super exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
}
/** 加入一个视图在最上一层 */
- (void)addSubview:(UIView *)view{
[super addSubview:view];
}
/** 在siblingSubview视图下面插入一个视图 */
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview{
[super insertSubview:view belowSubview:siblingSubview];
}
/** 在siblingSubview视图上面插入一个视图 */
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview{
[super insertSubview:view aboveSubview:siblingSubview];
}
/** 将一个视图放到最上一层 */
- (void)bringSubviewToFront:(UIView *)view{
[super bringSubviewToFront:view];
}
/** 将一个视图推送到最下层 */
- (void)sendSubviewToBack:(UIView *)view{
[super sendSubviewToBack:view];
}
/** 添加子视图时调用 */
- (void)didAddSubview:(UIView *)subview;{
[super didAddSubview:subview];
NSLog(@"添加子视图");
}
/** 将要移除子视图时调用 */
- (void)willRemoveSubview:(UIView *)subview{
[super willRemoveSubview:subview];
NSLog(@"移除子视图");
}
/** 父视图将要发生更改时调用 */
- (void)willMoveToSuperview:(UIView *)newSuperview{
[super willMoveToSuperview:newSuperview];
NSLog(@"父视图将要发生更改");
}
/** 父视图更改时调用 */
- (void)didMoveToSuperview{
[super didMoveToSuperview];
NSLog(@"父视图发生更改");
}
/** 视图或其超视图将要展示到窗口调用 */
- (void)willMoveToWindow:(UIWindow *)newWindow{
[super willMoveToWindow:newWindow];
NSLog(@"视图展示到窗口");
}
/** 视图或其超视图展示到窗口调用 */
- (void)didMoveToWindow{
[super didMoveToSuperview];
NSLog(@"视图或其超视图展示到窗口");
}
/** 判断当前视图是否是指定视图或者其子视图 */
- (BOOL)isDescendantOfView:(UIView *)view{
return [super isDescendantOfView:view];
}
/** 获取当前视图内指定tag值的视图 */
- (UIView *)viewWithTag:(NSInteger)tag{
return [super viewWithTag:tag];
}
/** 在图层绘制时调用的方法 */
- (void)setNeedsLayout{
}
- (void)layoutIfNeeded{
}
/** 当视图上的图层发生改变时调用 */
- (void)layoutSubviews{
}
/** 发生自动布局时调用 */
- (void)layoutMarginsDidChange{
}
/** 绘制图层layer时调用 */
- (void)drawRect:(CGRect)rect{
}
/** 重绘图层 */
- (void)setNeedsDisplay{
}
/** 重绘图层指定范围 */
- (void)setNeedsDisplayInRect:(CGRect)rect{
}
/** tintColor 是一种有抛光效果的设置视图颜色 */
/** tintColor改变时调用 */
- (void)tintColorDidChange{
}
#pragma mark - 动画相关
/** 开启动画块 animationID动画标示 context参数 */
+ (void)beginAnimations:(NSString *)animationID context:(void *)context{
[super beginAnimations:animationID context:context];
}
/** 提交动画块 动画开始执行 */
+ (void)commitAnimations{
[super commitAnimations];
}
/** 设置动画代理 */
+ (void)setAnimationDelegate:(id)delegate{
[super setAnimationDelegate:delegate];
}
/** 当动画开始时 发送一个消息给动画代理 */
+ (void)setAnimationWillStartSelector:(SEL)selector{
[super setAnimationWillStartSelector:selector];
/** 动画代理执行selector方法 */
}
/** 当动画结束时 发送一个消息给动画代理 */
+ (void)setAnimationDidStopSelector:(SEL)selector{
[super setAnimationDidStopSelector:selector];
/** 动画代理执行selector方法 */
}
/** 设置动画时长 默认0.2s */
+ (void)setAnimationDuration:(NSTimeInterval)duration{
[super setAnimationDuration:duration];
}
/** 设置动画执行延迟时长 默认0s */
+ (void)setAnimationDelay:(NSTimeInterval)delay{
[super setAnimationDelay:delay];
}
/** 设置动画开始时间NSDate */
+ (void)setAnimationStartDate:(NSDate *)startDate{
[super setAnimationStartDate:startDate];
}
/** 设置动画的曲线方式(就是动画的总体变化的时间曲线:开始快最后慢,开始慢最后快,最后慢,均匀线性)。
curve参数如下:
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
};
*/
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve{
[super setAnimationCurve:curve];
}
/** 设置动画重复次数 */
+ (void)setAnimationRepeatCount:(float)repeatCount{
[super setAnimationRepeatCount:repeatCount];
}
/**
设置动画是否做一次反向的执行。
如果设置为YES:动画将执行:动画初始状态》动画》动画完成状态》动画》动画初始状态。
如果设置为NO:默认值
*/
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses{
[super setAnimationRepeatAutoreverses:repeatAutoreverses];
}
/** 设置动画开始时状态
当YES时:当上一次动画正在执行中,那么当下一个动画开始时,上一次动画的当前状态将成为下一次动画的开始状态。
当NO时:当上一个动画正在执行中,那么当下一个动画开始时,上一次动画需要先恢复到完成时的状态,然后在开始执行下一次动画。
*/
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState{
}
/** 添加动画到视图view上 transition动画样式 cache为YES时 高效 但动画执行过程中不能更新UI 为NO时 每一帧都可以重新绘制 可以实时更新UI */
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache{
}
/** 是否支持动画 默认YES */
+ (void)setAnimationsEnabled:(BOOL)enabled{
}
/** 返回动画效果是否被禁用 */
+ (BOOL)areAnimationsEnabled{
return [super areAnimationsEnabled];
}
/** 强制一些动作不使用动画 我也不懂 测出来再补上 */
+ (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation{
}
#pragma mark - 动画Block块
/**
duration 执行时长
delay 延迟时长
options 动画执行曲线
animations 动画动作Block
completion 动画执行完毕后执行的Block
*/
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
}
/**
duration 执行时长
animations 动画动作Block
completion 动画执行完毕后执行的Block
*/
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
}
/**
duration 执行时长
animations 动画动作Block
*/
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations {
}
/**
SpringAnimation动画 干净 快速
usingSpringWithDamping 0~1 弹簧效果 越小弹簧效果越明显
initialSpringVelocity 初始速度 初始速度取值较高而时间较短时 也会出现弹簧效果
*/
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
}
/**
过场动画
duration 动画时长
view 进行转场动画的视图
options 专场动画类型
animations 执行动画
completion 动画结束后调用的Block
*/
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
}
/**
过场动画
[fromView.superview addSubview:toView];
[fromView.superview removeFromSuperview];
*/
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion {
}
/**
在一组视图上执行指定的系统动画,并可以并行自定义的动画
parallelAnimations就是与系统动画并行的自定义动画
*/
+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray *)views options:(UIViewAnimationOptions)options animations:(void (^)(void))parallelAnimations completion:(void (^)(BOOL finished))completion {
}
#pragma mark - UIViewKeyframeAnimations
/**
关键帧动画
duration 动画时长
delay 动画延迟
options 动画效果选项
animations 动画执行代码
completion 动画结束执行代码
*/
+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
}
/**
frameStartTime 动画相对开始时间
frameDuration 动画相对持续时间
自身会根据动画总持续时长自动匹配其运行时长
*/
+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:(void (^)(void))animations {
}
#pragma mark - 手势
/** 添加手势 */
- (void)addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer {
}
/** 移除手势 */
- (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer {
}
/** 是否执行该手势 */
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
/** 添加运动拟真效果 */
/** UIMotionEffect 运动拟真效果类 物理效果 */
- (void)addMotionEffect:(UIMotionEffect *)effect {
}
/** 移除运动拟真效果 */
- (void)removeMotionEffect:(UIMotionEffect *)effect {
}
#pragma mark - 约束 自动布局
/** 只知道是自动布局相关 但是具体效果 未知 查不到 测不出==! */
- (NSArray *)constraints {
return [super constraints];
}
/** 添加约束 需要先开启自动布局 */
- (void)addConstraint:(NSLayoutConstraint *)constraint {
}
/** 添加约束 */
- (void)addConstraints:(NSArray *)constraints {
}
/** 移除约束 */
- (void)removeConstraint:(NSLayoutConstraint *)constraint {
}
/** 移除约束 */
- (void)removeConstraints:(NSArray *)constraints {
}
/** 更新视图和其子视图的约束 */
- (void)updateConstraintsIfNeeded {
}
/** 更新视图和其子视图的约束 */
- (void)updateConstraints {
}
/** 是否更新视图的约束 */
- (BOOL)needsUpdateConstraints {
return [super needsUpdateConstraints];
}
/** 设置视图的约束需要更新 */
- (void)setNeedsUpdateConstraints {
}
/** 是否关闭自动布局 */
- (BOOL)translatesAutoresizingMaskIntoConstraints {
return [super translatesAutoresizingMaskIntoConstraints];
}
/** 是否关闭自动布局 */
- (void)setTranslatesAutoresizingMaskIntoConstraints:(BOOL)flag {
}
/** 是否支持自动布局 */
+ (BOOL)requiresConstraintBasedLayout {
return [super requiresConstraintBasedLayout];
}
/** 返回给定框架的视图的对齐矩阵 */
- (CGRect)alignmentRectForFrame:(CGRect)frame {
return [super alignmentRectForFrame:frame];
}
/** 返回给定对齐矩形的视图的frame */
- (CGRect)frameForAlignmentRect:(CGRect)alignmentRect {
return [super frameForAlignmentRect:alignmentRect];
}
/** 对当前View设置用来布局的矩形 设置偏移 */
- (UIEdgeInsets)alignmentRectInsets {
return [super alignmentRectInsets];
}
/** 默认返回当前视图的底部作为baseline。我们可以重写上述方法,但必须返回的是当前视图中的子视图 */
- (UIView *)viewForBaselineLayout {
return [super viewForBaselineLayout];
}
/** 通过重写intrinsicContentSize可以设置当前视图显示特定内容时的大小 */
- (CGSize)intrinsicContentSize {
CGSize size = [super intrinsicContentSize];
if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
size.width += 4.0f;
} else {
size.width += 40.0f;
}
if (self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) {
size.height += 4.0;
} else {
size.height += 40.0;
}
return size;
}
/** 视图根据内部内容设置Size */
- (void)invalidateIntrinsicContentSize {
[super invalidateIntrinsicContentSize];
}
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis {
return [super contentHuggingPriorityForAxis:axis];
}
/** 使其在“内容大小”的基础上不能继续变大 */
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis {
}
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis {
return [super contentCompressionResistancePriorityForAxis:axis];
}
/** 使其在在其“内容大小”的基础上不能继续变小 */
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis {
}
/** 动态计算控件的Size targetSize可传参数:UILayoutFittingCompressedSize最小情况下可能的Size UILayoutFittingExpandedSize最大情况下可能的Size */
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize {
return [super systemLayoutSizeFittingSize:targetSize];
}
/** 动态计算控件的Size UILayoutPriority 优先级
horizontalFittingPriority 水平约束优先级
verticalFittingPriority 垂直约束优先级 */
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority {
return [super systemLayoutSizeFittingSize:targetSize withHorizontalFittingPriority:horizontalFittingPriority verticalFittingPriority:verticalFittingPriority];
}
/** 约束检查 为什么这个View 这样显 返回值 约束条件 */
- (NSArray *)constraintsAffectingLayoutForAxis:(UILayoutConstraintAxis)axis {
return [super constraintsAffectingLayoutForAxis:axis];
}
/** 判断当前的自动布局约束 是否还有其他满足约束的条件 */
- (BOOL)hasAmbiguousLayout {
return [super hasAmbiguousLayout];
}
/** 随机实现一个满足约束的条件 */
- (void)exerciseAmbiguityInLayout {
}
#pragma mark - NSCoder
/** 归档时编码 */
- (void) encodeRestorableStateWithCoder:(NSCoder *)coder {
}
/** 反归档时解码 */
- (void) decodeRestorableStateWithCoder:(NSCoder *)coder {
}
/** 复制一个复合视图
afterUpdates 是否视图展示时才生成视图
No 会立即生成快照,并不会调用重新设置颜色的方法 无色
YES 当调用这个视图时生成
*/
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates {
return [super snapshotViewAfterScreenUpdates:afterUpdates];
}
/** 复制一个指定范围偏移量的复合视图 */
- (UIView *)resizableSnapshotViewFromRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates withCapInsets:(UIEdgeInsets)capInsets {
return [super resizableSnapshotViewFromRect:rect afterScreenUpdates:YES withCapInsets:capInsets];
}
/** 将指定范围的视图 绘制到图形上下文中 */
- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates {
return [super drawViewHierarchyInRect:rect afterScreenUpdates:afterUpdates];
}