1. UIWindow:
1. There are three levels of UIWindowLevel:
UIWindowLevleNormal,
UIWindowLevelAlert;
UIWindowLevelStatusBar;
Among them, the normal level is the lowest, but the statusBar, the highest level is alertView, alertView is generally used to interrupt user events. Print their values as 0.0000, 1000, and 2000 respectively.
2.-(CGPoint) convertPoint :( CGPoint) point toWindow :( UIWindow *) window; // can be used to convert to another window
-(CGPoint) convertPoint :( CGPoint) point fromWindow :( UIWindow *) window; // pass in nil to mean screen
-(CGRect) convertRect :( CGRect) rect toWindow :( UIWindow *) window;
-(CGRect) convertRect :( CGRect) rect fromWindow :( UIWindow *) window
Four Coordinate Transformations
3. the pop-up and hide notifications on the keyboard are in the UIWindow.
4. Operation Status Bar: Because stateBar is on the system Window and its level is UIWindowLevelStatusBar, we can create a Window level to overwrite Alert.
Ii. UIview:
1. animation curve attributes: Four
Typedef NS_ENUM (NSInteger, UIViewAnimationCurve ){
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
};
Set the animation curve in the animation playback process, such as fast first, slow, and linear.
2. animated transition: Flip up and down
Typedef NS_ENUM (NSInteger, UIViewAnimationTransition ){
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
};
3. Set the content mode:
Typedef NS_ENUM (NSInteger, UIViewContentMode ){
UIViewContentModeScaleToFill, // full control size, will stretch
UIViewContentModeScaleAspectFit, // scale proportionally until the length or width is the same as the size of the control.
UIViewContentModeScaleAspectFill, // scale according to the original proportion until the Minimum side is filled with the control, it will exceed the control
UIViewContentModeRedraw, // re-painting, will call setNeedDisplay, the same effect as the first one
UIViewContentModeCenter, // center, unchanged size
UIViewContentModeTop, // In the middle of the top, the size remains unchanged
UIViewContentModeBottom, // The middle of the bottom. The size remains unchanged. The following is similar
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
};
4. UIViewAutoresizingFlexibleLeftMargin automatically adjusts the distance between the left and the parent control, that is, the distance from the right of the parent control remains unchanged.
5. animation attributes:
Typedef NS_OPTIONS (NSUInteger, UIViewAnimationOptions ){
UIViewAnimationOptionLayoutSubviews = 1 <0, // animation of the Child Control
UIViewAnimationOptionAllowUserInteraction = 1 <1, // turn on user interaction while animating
UIViewAnimationOptionBeginFromCurrentState = 1 <2, // start all views from current value, not initial value
UIViewAnimationOptionRepeat = 1 <3, // repeat animation indefinitely duplicate
UIViewAnimationOptionAutoreverse = 1 <4, // if repeat, run animation back and forth upside down
UIViewAnimationOptionOverrideInheritedDuration = 1 <5, // ignore nested duration
UIViewAnimationOptionOverrideInheritedCurve = 1 <6, // ignore nested curve
UIViewAnimationOptionAllowAnimatedContent = 1 <7, // animate contents (applies to transitions only)
UIViewAnimationOptionShowHideTransitionViews = 1 <8, // flip to/from hidden state instead of adding/removing
UIViewAnimationOptionOverrideInheritedOptions = 1 <9, // do not inherit any options or animation type
UIViewAnimationOptionCurveEaseInOut = 0 <16, // default
UIViewAnimationOptionCurveEaseIn = 1 <16,
UIViewAnimationOptionCurveEaseOut = 2 <16,
UIViewAnimationOptionCurveLinear = 3 <16,
UIViewAnimationOptionTransitionNone = 0 <20, // default
UIViewAnimationOptionTransitionFlipFromLeft = 1 <20,
UIViewAnimationOptionTransitionFlipFromRight = 2 <20,
UIViewAnimationOptionTransitionCurlUp = 3 <20,
UIViewAnimationOptionTransitionCurlDown = 4 <20,
UIViewAnimationOptionTransitionCrossDissolve = 5 <20,
UIViewAnimationOptionTransitionFlipFromTop = 6 <20,
UIViewAnimationOptionTransitionFlipFromBottom = 7 <20,
} NS_ENUM_AVAILABLE_IOS (4_0 );
Note: You can upload multiple parameters. You can use | or to upload multiple parameters.
UIViewAnimationOptionAllowUserInteraction) the animation is converted to (200,200,100,100). When the animation is executed, the image or button position has changed to (200,200,100,100). Therefore, you must click in (200,200,100,100) to make the animation effective, CLICKING In (100,100,) is invalid.
6.-(UIView *) hitTest :( CGPoint) point withEvent :( UIEvent *) event
HitTest: used to determine which sub-view to respond to events. The hidden control or a control with an alpha value less than 0.01 is invalid and will not call this function. This function will call-pointInside: withEvent: function recursively so that a control does not respond, you can override this function and return NO, so that even if the control's userInteractionEnabled is set to YES, it will not work.
HitTest principle: it distributes events to subviews one by one through-pointInside: withEvent. If YES is returned, the inheritance tree of the subview is traversed, check which sub-view will respond. If no response is returned, nil will be returned, self will be returned, and Recursion will end.
HitTest: withEvent :==> call pointInside: withEvent :==> (point function returns NO, end branch, return nil) // return YES ==> (the current view does not have subview, and hitTest returns self) // The current view has subviews ==> traverse from the top view of subviews, call hitTest: withEvent: recursively until hitTest returns the first non-nil object ==>( hitTest: withEvent :)
Events are distributed through UIApplication, which has an event queue.