• iOS 分类:按顺序添加视图


    一, 场景:

    1. 在一个父视图上添加多个子视图的情况下, 有可能出现添加视图的时机有先后的问题, 后来的视图会遮盖住先来的视图.
    2. 可以在添加子视图的时候, 获取需要展示的优先级大小..优先级越高, 就在已有视图更外层显示.

    二, 分类方法代码如下:

    1 // UIView+addsubview.h
    2 
    3 @interface UIView (addsubview)
    4 @property (nonatomic,assign) NSInteger sort;
    5 - (void)addsubviewBysort:(UIView *)newView ;
    6 
    7 @end
     1 //UIView+addsubview.m
     2 
     3 #import "UIView+addsubview.h"
     4 #import <objc/runtime.h>
     5 @implementation UIView (addsubview)
     6 - (void)setSort:(NSInteger)sort{
     7     objc_setAssociatedObject(self, @selector(setSort:), @(sort), OBJC_ASSOCIATION_ASSIGN);
     8 }
     9 
    10 - (NSInteger)sort{
    11     NSNumber *num = objc_getAssociatedObject(self, @selector(setSort:));
    12     return num.integerValue;
    13 }
    14 
    15 - (void)addsubviewBysort:(UIView *)newView {
    16     BOOL bInsert = NO;
    17     for (NSInteger i = self.subviews.count - 1; i >= 0  ; i--) {
    18         UIView *subview = [self.subviews objectAtIndex:i];
    19         if (subview.sort <= newView.sort) {
    20             bInsert = YES;
    21             NSLog(@"lz--insert->%li---on:%li",(long)newView.sort,(long)subview.sort);
    22             [self insertSubview:newView aboveSubview:subview ];
    23             break;
    24         }
    25     }
    26     if (bInsert == NO) {
    27         NSLog(@"lz--below all->%li",(long)newView.sort);
    28         [self insertSubview:newView atIndex:0];
    29     }
    30 }
    31 
    32 - (NSInteger)getMaxSort{
    33     NSInteger maxSort = 0;
    34     for (UIView *subview in self.subviews) {
    35         if (maxSort < subview.sort) {
    36             maxSort = subview.sort;
    37         }
    38     }
    39     return maxSort;
    40 }
    41 @end

    三, 调用方式代码如下:

     1 - (void)test{
     2     for (int i = 100; i > 0; i--) {
     3         dispatch_async(dispatch_get_main_queue(), ^{
     4             UIView *view = [UIView new];
     5             view.sort = arc4random()%100;
     6             [self.view addsubviewBysort:view];
     7         });
     8     }
     9     
    10     
    11     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    12         for (UIView *subview in self.view.subviews) {
    13             NSLog(@"lz-->%li",(long)subview.sort);
    14         }
    15     });
    16 
    17 }
  • 相关阅读:
    关于nginx 一个服务器,多个站点的困惑?
    asp.net core 6 (单文件版本控制)
    Photoshop无法载入动作,因为意外地遇到文件尾处理办法
    envi5.3打开失败JSON_PARSE: Invalid string, no closing '"'
    GEE的存储空间
    IDL实现TM遥感影像直方图统计(中值、均值、方差、众数及峰度系数计算)(转)
    Revit二次开发——读取shp
    Linux使用记录
    RandLANet使用
    Revit2018二次开发——外部工具不显示
  • 原文地址:https://www.cnblogs.com/lz465350/p/10238241.html
Copyright © 2020-2023  润新知