Click the status bar roll back to the top this function is the system comes with, only need to set up self.scrollView.scrollsToTop = YES
,
But this property has a premise that the window must have only one scrollable to have the View
effect, this time you need to customize the creation of a window
To complete this function.
Add window
- In
AppDelegate
creating a new window must give this window to set a root controller, otherwise it will error, here can be dispatch_after
added to the window by a delay can not set the root controller
- The window is level, the
windowLevel
higher the level the higher the display at the top, if the level is the same, then the added creation is displayed at the top. Level is divided into three types, UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal
then create a create and add a monitor
1 /**2 * Show Top window3 */4+ (void) Show5 {6Dispatch_after (Dispatch_time (Dispatch_time_now, (int64_t) (0.25* nsec_per_sec)), Dispatch_get_main_queue (), ^{7Topwindow_ =[[UIWindow alloc] init];8Topwindow_.windowlevel =Uiwindowlevelalert;9Topwindow_.frame =[uiapplication sharedapplication].statusbarframe;TenTopwindow_.backgroundcolor =[Uicolor Clearcolor]; OneTopwindow_.hidden =NO; A [Topwindow_ Addgesturerecognizer:[[uitapgesturerecognizer alloc] initwithtarget:self action: @selector (Topwindo Wclick)]; - }); - } the - /** - * Listen to the top of the window click - */ ++ (void) Topwindowclick - { +UIWindow *keywindow =[uiapplication Sharedapplication].keywindow; A [self Searchallscrollviewsinview:keywindow]; at } - - /** - * Find all Uiscrollview in the parameter view - */ -+ (void) Searchallscrollviewsinview: (UIView *) View in { - //recursive traversal of all child controls to for(UIView *subviewinchview.subviews) { + [self searchallscrollviewsinview:subview]; - } the * $ //Determine the child control type (if not uiscrollview, return directly)Panax Notoginseng if(! [View Iskindofclass:[uiscrollviewclass]])return; - the //found Uiscrollview. +Uiscrollview *scrollview = (Uiscrollview *) view; A the //determine if Uiscrollview is overlapping with window (if Uiscrollview does not overlap with window, return directly) + if(! [ScrollView Bs_intersectswithanotherview:nil])return; - $ //let Uiscrollview scroll to the front $ //Jean CGRectMake (0, 0, 1, 1) This rectangle is completely displayed in the frame frame of the ScrollView -[ScrollView Scrollrecttovisible:cgrectmake (0,0,1,1) Animated:yes]; -}
Note that there is a Uiscrollview classification, which is added to this method.
-(BOOL) Bs_intersectswithanotherview: (UIView *) anotherview{ if (Anotherview = = nil) Anotherview = [uiapplication sharedapplication].keywindow; // determine if self and anotherview overlap CGRect selfrect = [self convertRect:self.bounds toview:nil]; = [Anotherview convertRect:anotherView.bounds toview:nil]; return Cgrectintersectsrect (Selfrect, anotherrect);}
The above method can be used to determine whether 2 of the same coordinate system View
overlap, and if anotherView
it is empty, return to the window
Add the above code to the listening method to complete the function
ios-Customize click the status bar to roll back to the top