• Sketch-iOS-Library:复制 iOS 样式库到 Sketch 以改善、加速设计流程
  • ios复制应用程序Khamosh Pathak Khamosh Pathak iOS 14 introduced an “App Library” feature that acts like an app drawer. It’s a place for your apps to be automatically organized into folders by ...


    User using iOS 14 App Library to see how it works
    Khamosh Pathak
    Khamosh Pathak

    iOS 14 introduced an “App Library” feature that acts like an app drawer. It’s a place for your apps to be automatically organized into folders by category.  That concept might sound handy to you, too, if you have an Android. Let’s see if we can mimic it.

    iOS 14引入了“应用程序库”功能,其功能类似于应用程序抽屉。 在这里,您的应用程序可以按类别自动组织到文件夹中。 如果您使用的是Android,那么这个概念可能对您来说也很方便。 让我们看看是否可以模仿它。

    The App Library can sort of be compared to Android’s app drawer, the place where all of the apps on your device are stored. The big difference is the App Library organizes the apps into categories automatically. This can make it easier to find what you’re looking for.

    可以将应用程序库与Android的应用程序抽屉(可以存储设备上所有应用程序的位置)进行比较。 最大的区别是,应用程序库自动将应用程序分类。 这可以使查找所需内容变得更加容易。

    To mimic this feature on an Android device, there are a couple of different approaches we can take. You can download a launcher that supports app drawer categories, or use an app drawer application with your existing launcher.

    要在Android设备上模仿此功能,我们可以采取几种不同的方法。 您可以下载支持应用程序抽屉类别的启动器,或者将应用程序抽屉应用程序与现有启动器一起使用。

    补充您的应用程序抽屉 (Supplement Your App Drawer)

    The App Library is Apple’s version of an app drawer, so it makes sense to replace the existing app drawer in your launcher. “Smart Drawer” is an app that organizes all your apps into categories. You can use it as the app drawer in any launcher.

    App Library是Apple的应用程序抽屉版本,因此有必要替换启动器中的现有应用程序抽屉。 “智能抽屉”是一款将所有应用分类的应用。 您可以在任何启动器中将其用作应用程序抽屉。

    First, download Smart Drawer from the Google Play Store to your Android device.

    首先,从Google Play商店将Smart Drawer下载到您的Android设备。

    smart drawer

    Open the app, and you’ll be greeted by a few introductory slides. Tap “Continue” until you get to “Enable Online Sorting.” This setting is what allows the app to automatically sort your apps into categories, so make sure it’s enabled and tap “Continue.”

    打开该应用程序,您会看到一些介绍性幻灯片。 点击“继续”,直到进入“启用在线排序”。 此设置使应用程序可以自动将应用程序分类,因此请确保已启用它,然后点击“继续”。

    enable online sorting

    The next screen will explain how you can replace your existing app drawer with Smart Drawer. Tap “Start.”

    下一个屏幕将说明如何使用Smart Drawer替换现有的应用程序抽屉。 点击“开始”。

    replace app drawer

    You’ll be taken to the Smart Drawer with different app categories along the left side of the screen. Tap the category icons to see your apps. It may take a few minutes for all of your apps to be organized.

    屏幕左侧将显示带不同应用类别的智能抽屉。 点击类别图标以查看您的应用。 整理您的所有应用可能需要几分钟。

    app drawer categories

    You can tap the “Search” icon in the top-right corner to find a specific app.


    search for an app

    Long-press an app to bring up more options. From here, you can drag it to a different category.

    长按一个应用程序可显示更多选项。 从这里,您可以将其拖到其他类别。

    move app to new category

    You can add a category by tapping the three-dot menu icon in the top-right corner and selecting “Add Category.” The free version of Smart Drawer allows a maximum of six categories.

    您可以通过点击右上角的三点菜单图标并选择“添加类别”来添加类别。 Smart Drawer的免费版本最多允许六个类别。

    add new category

    To remove a category, long-press the category icon and then select “Remove.”


    remove category

    The advantage of Smart Drawer is you can place the app icon anywhere on your home screen and you have access to an organized drawer.

    Smart Drawer的优点是您可以将应用程序图标放置在主屏幕上的任何位置,并且可以访问组织良好的抽屉。

    尝试新的启动器 (Try a New Launcher)

    The launcher is the app that you see as your home screen. One of the cool things about Android is you can change up the launcher pretty easily. That’s what we’ll do here.

    启动器是您在主屏幕上看到的应用程序。 关于Android的一件很酷的事情是,您可以轻松地更改启动器。 那就是我们在这里要做的。

    First, download “Smart Launcher 5” from the Google Play Store on your Android device.

    首先,从Android设备上的Google Play商店下载“ Smart Launcher 5 ”。

    smart launcher 5

    Open the launcher, and tap “Get Started.” Agree to the terms and conditions to proceed.

    打开启动器,然后点击“入门”。 同意继续进行的条款和条件。

    tap get started

    Next, you’ll see a list of permissions. You don’t need to allow all of these permissions to use the launcher. The only permission we need is “Storage;” the others are for widgets and other optional features. Tap “Next” when you’re done.

    接下来,您将看到权限列表。 您不需要允许所有这些权限来使用启动器。 我们唯一需要的许可是“存储”; 其他用于小部件和其他可选功能。 完成后,点击“下一步”。

    give permissions and tap next

    Android will ask you to grant all the permissions you enabled. Tap “Allow.”

    Android会要求您授予所有启用的权限。 点击“允许”。

    allow permissions

    Now you’ll be asked to choose a wallpaper. Make your choice, and tap “Next.”

    现在,将要求您选择墙纸。 做出选择,然后点击“下一步”。

    choose a wallpaper and tap next

    The app will ask if you want to unlock all features with a Premium subscription. This is not necessary for what we will be doing. Tap the “X” icon in the top-right corner.

    该应用程序将询问您是否要通过高级订阅解锁所有功能。 这对于我们将要做的事情不是必需的。 点击右上角的“ X”图标。

    skip premium

    You’ll now be looking at the default home screen set up for the launcher. The App Library-like categories can be accessed by swiping up on the home screen.

    现在,您将查看为启动器设置的默认主屏幕。 可以通过在主屏幕上向上滑动来访问类似于App Library的类别。

    app categories demo

    The launcher can be used perfectly fine just like this. However, if you’re interested in removing some of the extra stuff (news feed, widget panel, etc), we have a file you can download to import a more cleaned-up home screen.

    这样就可以完美使用启动器了。 但是,如果您有兴趣删除一些多余的东西(新闻提要,窗口小部件面板等),我们可以下载一个文件,以导入更干净的主屏幕。

    First, download this file to your Android device. You’ll need to extract the ZIP file before proceeding.

    首先, 将此文件下载到您的Android设备。 您需要先提取ZIP文件,然后再继续。

    Now that the backup file has been downloaded, tap and hold on your home screen to bring up the “Settings” panel and then select “Show All Settings.”


    tap show all settings

    Choose “Backup” from Settings.


    select backup

    Next, tap the “Folder” icon in the bottom-left corner.


    tap the folder icon

    Select the file you downloaded earlier. A message will explain that restoring from this backup will wipe the current configuration. Tap “OK.”

    选择您先前下载的文件。 将显示一条消息,说明从此备份还原将擦除当前配置。 点击“确定”。

    restore from backup

    You’ll be brought back to your home screen. Now, all you have to do is swipe over to the right-most home screen to see the faux App Library.

    您将被带回主屏幕。 现在,您所要做的就是在最右边的主屏幕上滑动,以查看伪造的App Library。

    home screen gif

    The launcher automatically sorts your apps into the categories listed in the bottom bar. To add a new category, tap the three-dot menu icon, and select “Add Category.” You can choose from one of the preset categories, and your apps will be sorted.

    启动器会自动将您的应用分类到底部栏中列出的类别中。 要添加新类别,请点按三点菜单图标,然后选择“添加类别”。 您可以从预设类别之一中进行选择,然后将对您的应用进行排序。

    add category

    To remove a category, long-press the icon, and tap the “Trash” icon to delete it.


    remove category

    These solutions aren’t exactly like iOS 14’s App Library, but they do allow you to automatically organize apps. It can be a pain to sort dozens of apps on your phone. Hopefully, these solutions can help.

    这些解决方案与iOS 14的应用程序库不完全相同,但是它们确实允许您自动组织应用程序。 在手机上对数十种应用进行排序可能会很痛苦。 希望这些解决方案能有所帮助。

    翻译自: https://www.howtogeek.com/690989/how-to-replicate-the-ios-14-app-library-on-android/


  • 这是Make It So的源代码,我的博客文章“使用SwiftUI和Firebase复制iOS提醒应用程序”附带的示例应用程序 ·· 目录 关于该项目 建于 入门 要启动并运行本地副本,请按照以下步骤操作。 先决条件 该项目使用...
  • iOS复制与浅复制

    2020-08-11 23:50:55
    iOS深浅复制概念应用场景集合类对象和非集合类对象单层深复制和完全深复制完全深复制的实现 概念 浅复制:主要拷贝的是对象的引用值,并没有进行真正的复制复制的对象和原对象都指向同一个地址。 深复制:主要是将...








        NSString *stringcopy = @"hello,world";
        NSString *copy_string = [stringcopy copy];
        NSLog(@"string = %p",stringcopy);
        NSLog(@"copy_string = %p",copy_string);
        NSString *stringcopy2 = @"hello,world";
        NSMutableString *copy_string2 = [stringcopy mutableCopy];
        NSLog(@"string2 = %p",stringcopy2);
        NSLog(@"copy_string2 = %p",copy_string2);
        NSMutableString *mutablestring = [[NSMutableString alloc] init];
        [mutablestring appendString:@"hello"];
        NSString *mutable_string = [mutablestring copy];
        NSLog(@"mutablestring = %p",mutablestring);
        NSLog(@"mutable_string = %p",mutable_string);
        NSMutableString *mutablestring2 = [[NSMutableString alloc] init];
        [mutablestring2 appendString:@"hello"];
        NSMutableString *mutable_string2 = [mutablestring mutableCopy];
        NSLog(@"mutablestring2 = %p",mutablestring2);
        NSLog(@"mutable_string2 = %p",mutable_string2);
    string = 0x10dacc020
    copy_string = 0x10dacc020
    string2 = 0x10dacc020
    copy_string2 = 0x6000003486c0
    mutablestring = 0x6000003029d0
    mutable_string = 0xcbbcdfa34e0a2222
    mutablestring2 = 0x600000366490
    mutable_string2 = 0x600000366790


    集合类对象是指NSArray、NSDictionary … 之类的对象,集合对象与非集合对象所遵循的规则基本上是一样的(但是:集合对象的内容拷贝仅限于对象本身,对象元素仍然是指针拷贝,也就是说:集合对象的深复制并不是严格意义上的深复制,而是单层深复制)

        NSArray *imarray = @[@"apple"];
        NSArray *copy_imarray = [imarray copy];
        NSLog(@"imarray = %p", imarray);
        NSLog(@"copy_imarray = %p", copy_imarray);
        NSArray *imarray2 = @[@"apple"];
        NSMutableArray *copy_imarray2 = [imarray mutableCopy];
        NSLog(@"imarray2 = %p", imarray2);
        NSLog(@"copy_imarray2 = %p", copy_imarray2);
        NSMutableArray *mutablearray = [[NSMutableArray alloc] init];
        [mutablearray addObject:@"apple"];
        [mutablearray addObject:@"banana"];
        [mutablearray addObject:@"melon"];
        NSArray *copy_mutablearray = [mutablearray copy];
        NSLog(@"mutablearray = %p", mutablearray);
        NSLog(@"copy_murablearray = %p", copy_mutablearray);
        NSMutableArray *mutablearray2 = [[NSMutableArray alloc] init];
        [mutablearray2 addObject:@"apple"];
        [mutablearray2 addObject:@"banana"];
        [mutablearray2 addObject:@"melon"];
        NSMutableArray *copy_mutablearray2 = [mutablearray mutableCopy];
        NSLog(@"mutablearray2 = %p", mutablearray2);
        NSLog(@"copy_murablearray2 = %p", copy_mutablearray2);
    imarray = 0x60000262c7c0
    copy_imarray = 0x60000262c7c0
    imarray2 = 0x600002638950
    copy_imarray2 = 0x600002a558c0
    mutablearray = 0x600002a3f480
    copy_murablearray = 0x600002a3f270
    mutablearray2 = 0x600002a55c80
    copy_murablearray2 = 0x600002a55b00



        NSMutableArray *mutablearray2 = [[NSMutableArray alloc] init];
        [mutablearray2 addObject:@"apple"];
        [mutablearray2 addObject:@"banana"];
        [mutablearray2 addObject:@"melon"];
        NSMutableArray *copy_mutablearray2 = [mutablearray mutableCopy];
        NSLog(@"mutablearray2 = %p", mutablearray2);
        NSLog(@"copy_murablearray2 = %p", copy_mutablearray2);
        NSLog(@"第一层 = %p", mutablearray2[0]);
        NSLog(@"第一层复制 = %p", copy_mutablearray2[0]);
    mutablearray2 = 0x60000344eeb0
    copy_murablearray2 = 0x60000344ec70
    第一层 = 0x101ccc020
    第一层复制 = 0x101ccc020



    使用 initWith***: copyItems:YES 方法
    自定义集合对象使用这个方法,对象必须遵守NSCopying协议,并重写- (id)copyWithZone:(NSZone *)zone方法。(系统类方法已经实现)。

    #import <Foundation/Foundation.h>
    @interface ModelStudent : NSObject<NSCopying>
    @property(nonatomic, copy) NSString * name;
    @property(nonatomic, assign) NSInteger  age;
    @property(nonatomic, assign) NSInteger sex;
    #import "ModelStudent.h"
    @implementation ModelStudent
    - (id)copyWithZone:(NSZone *)zone{
        ModelStudent * s = [[ModelStudent alloc]init];
        s.name = self.name;
        s.age = self.age;
        s.sex = self.sex;
        return s;
        ModelStudent * model1 = [ModelStudent new];
        model1.name = @"mao";
        model1.age = 14;
        ModelStudent * model2 = [ModelStudent new];
        model2.name = @"mao";
        model2.age = 14;
        self.arr = @[model1, model2];
        NSArray * array4 = [[NSArray alloc]initWithArray:self.arr copyItems:YES];
        NSLog(@"%@,%@", self.arr, array4);


    array (
        "<ModelStudent: 0x600000fb1220>",
        "<ModelStudent: 0x600000fb1260>"
    copy array (
        "<ModelStudent: 0x600000fb11e0>",
        "<ModelStudent: 0x600000fb12a0>"



    ModelStudent *student1 = [[ModelStudent alloc] init];
        student1.name = @"111";
        student1.age = 10;
        student1.sex = 1;
        ModelStudent *student2 = [[ModelStudent alloc] init];
        student2.name = @"222";
        student2.age = 20;
        student2.sex = 0;
        self.array = @[student1, student2];
        NSMutableArray *manyArray = [NSMutableArray arrayWithObjects:_array, @"123", nil];
        NSMutableArray *copyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:manyArray requiringSecureCoding:NO error:nil] ];
    manyArray (
            "<ModelStudent: 0x600003905640>",
            "<ModelStudent: 0x6000039054a0>"
    copy array (
            "<ModelStudent: 0x600003905840>",
            "<ModelStudent: 0x600003905880>"
  • iOS 长按复制文本

    千次阅读 2017-08-09 16:53:16
    iOS 长按复制文本

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.view.backgroundColor=[UIColor whiteColor];



        _label=[[UILabel alloc]init];

        _label.text=[NSString stringWithFormat:@"%@%@%@%@",self.sheng,self.shi,self.qu,self.xiangxi];

        _label.textColor=[UIColor redColor];


        _label.frame=CGRectMake(20,80, 300, 30);


        NSLog(@"==%@ ==%@  ==%@ 还有==%@",self.sheng,self.shi,self.qu,self.xiangxi);


        [self.view addSubview:_label];


        [self createGesture];




        UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressCellHandle:)];


        longPressGesture.minimumPressDuration =2;

        [self.label addGestureRecognizer:longPressGesture];


    -(void)longPressCellHandle:(UILongPressGestureRecognizer *)gesture



    //        [self becomeFirstResponder];


            if (gesture.state==UIGestureRecognizerStateEnded) {


                UIMenuController *menuController = [UIMenuController sharedMenuController];


                UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(menuCopyBtnPressed:)];


                menuController.menuItems = @[copyItem];


                [menuController setTargetRect:gesture.view.frame inView:gesture.view.superview];


                [menuController setMenuVisible:YES animated:YES];


                [UIMenuController sharedMenuController].menuItems=nil;






    -(void)menuCopyBtnPressed:(UIMenuItem *)menuItem




            [UIPasteboard generalPasteboard].string = self.label.text;







            return YES;




        -(BOOL)canPerformAction:(SEL)action withSender:(id)sender




            if (action == @selector(menuCopyBtnPressed:)) {


                return YES;




            return NO;





  • iOS复制复制

    2019-05-11 23:29:00
    复制复制的对象指向被复制对象的内存,并没有开辟新内存深复制复制的对象开辟新内存,是一块新的存储空间。 对于深复制和浅复制具体的实现是在copyWithZone方法中确定的,不同的类会对这个方法有不同的实现...




    mutableCopy 赋值完成之后,是可变对象的,都是深复制,内部是可以添加数据的
    浅复制:不可变对象 + Copy   
    深复制:可变对象 + Copy  and  mutableCopy 的所有情况   


  • iOS 复制文本

    2019-01-17 09:47:50
    最近在项目中遇到了一个问题:点击按钮,复制一段指定的文本,发现自己不知道百度一番找见了在这里记录下来。 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = @"要...
  • iOS 完全深复制

    2019-11-20 20:55:19
    关于深复制与浅复制的简介:iOS复制与浅复制 实现完全深复制的方法有两种:协议方法和归档解档 归档和解档的概念补充: 有时存在这样的需求,即将程序中使用的多个对象及其属性值,以及它们的相互关系保存到文件...
  • 在unity中,将文本复制IOS剪贴板,可以使用原生的剪切板
  • h5 复制功能实现(兼容IOS和android)

    千次阅读 2019-04-11 12:16:41
    安卓实现方法: document.getElementById('#input').select(); //选择所要复制的文本节点 ...IOS实现方法: 1、window.getSelection().removeAllRanges(); //将页面所有的文本区域都从选区中...
  • iOS复制复制

    2016-03-04 13:16:16
    复制:增加一个指针并且申请一块新的内存,使这个增加的指针指向这个新的内存 浅复制:只是增加了一个指针,指向已经存在的内存。 1.Foundation对于不可变复制对象而言,copy做了优化,相当于retain。 也就是当...
  • iOS 集合的深复制与浅复制 ArchivesiOS 概念 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。 一图以...
  • iOS复制与浅复制

    2019-10-27 00:48:37
    文章目录简介代码探索非集合类对象集合类对象单层深复制完全深复制 简介 浅复制:只改变新对象的指针指向,并未生成新的内存地址,只是将新对象的指针指向要复制对象的内存地址 深复制:改变新对象指针指向,还为...
  • IOS 复制 粘贴

    2016-07-08 15:09:41
    UIPasteboard 是系统单例  [UIPasteboard generalPasteboard]    同时还能复制:  string 数组: strings  URL URLs  image images  color col
  • ios 复制

    2018-04-02 11:04:06
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = @"12345566";然后再次点击有输入框的地方 长按就会有粘贴这一项
  • 使用原生方法 在安卓上可用 iOS失效 // 复制 copy(data) { let oInput = document.createElement("input");//创建输入框 oInput.value = data;//赋值 document.body.appendChild(oInput);//添加到body oInput....
  • ios复制target

    2014-09-29 14:14:32
    1 选择target右键duplicate,复制一份 2gai m
  • iOS UIView的复制

    2016-09-01 11:20:00
    iOS UIView的复制 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS...
  • iOS中深复制和浅复制问题 NSDictionary对象,添加内容,然后通过代码产生可变和不可变副本,这些复制是深复制还是浅复制?那么对于可变对象呢?为什么NSString定义属性时需要用copy呢?copy属性和copy对象有什么...
  • iOS深浅复制

    2014-02-27 14:56:03
    最近在看iOS关于深浅拷贝的知识,把自己的学习到的东西总结下,方便以后参考。下面开始:  深拷贝 ,alloc一个新的地址返回,为它赋值,  浅拷贝,并不创建新的内存空间,直接把原地址返回。  1.对于系统的非容器类...
  • iOS CAReplicatorLayer 复制图层

    万次阅读 2017-07-07 16:41:10
    CAReplicatorLayer 是 CALayer 的子类,是一个图层容器,可以添加特定的图层到其中,并复制出多个图层,例如你把一个单一的形状,通过简单的设置,在屏幕上就可以显示多个相同的形状。
  • iOS TTTAttributedLabel复制

    千次阅读 2016-08-28 22:06:57
    由于工作需要,我在TTTAttributedLabel源文件的基础上做了少许修改以便使它支持复制操作操作,并且能够根据需要响应自定义操作。 1、添加的两个property /// 长按手势下UIMenuController要展示的选项,如复制...
  • iOS之对象复制

    2017-06-16 08:50:10
    转发自 : http://www.cocoachina.com/ios/20170314/18865.html NSObject类提供了copy和mutableCopy方法,通过这两个方法即可复制已有对象的副本,本文将会详细介绍关于对象复制的内容。 系统对象的copy与...
  • 深浅复制-ios

    2014-02-12 10:12:00
    Ios 提供了 copy 和 mutablecopy 方法,顾名思义, copy 就是复制了一个 imutable 的对象即:指针复制,而 mutablecopy 就是复制了一个 mutable 的对象即:对象复制。以下将...



1 2 3 4 5 ... 20
收藏数 5,467
精华内容 2,186