太長了,請看 http://blog.csdn.net/xdrt81y/article/details/9128695
performSelector:
performSelector:withObject:
performSelector:withObject:withObject:
實際調用
[self performSelector:@selector(displayViews) withObject:nil afterDelay:1.0f];
有三個方法分别是
//父視圖
[self.view superview]
//所有子視圖
[self.view subviews]
//自身的window
self.view.window
循環一個視圖下面所有視圖的方法
NSArray *allSubviews(UIView *aView)
{
NSArray *results = [aView subviews];
for (UIView *eachView in [aView subviews])
{
NSArray *riz = allSubviews(eachView);
if (riz) {
results = [results arrayByAddingObjectsFromArray:riz];
}
}
return results;
}
循環傳回一個APPLICATION裡面所有的VIEW
// Return all views throughout the application
NSArray *allApplicationViews()
NSArray *results = [[UIApplication sharedApplication] windows];
for (UIWindow *window in [[UIApplication sharedApplication] windows])
NSArray *riz = allSubviews(window);
if (riz) results = [results arrayByAddingObjectsFromArray: riz];
找出所有的父視圖
// Return an array of parent views from the window down to the view
NSArray *pathToView(UIView *aView)
NSMutableArray *array = [NSMutableArray arrayWithObject:aView];
UIView *view = aView;
UIWindow *window = aView.window;
while (view != window)
view = [view superview];
[array insertObject:view atIndex:0];
return array;