2015-07-23 17:56:45 Relax_Ver 阅读数 260
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    3812 人正在学习 去看看 缪传海

当手指在图片中上下滑动的时候,图片的上半部分会有折叠效果。类似地可以扩展到其他需要折叠的场景中。

layer.contentsRect

用来截取layer的部分内容重新在frame中渲染。


代码及关键注释如下:

@interface ViewController ()


{

    /**

     *  创建两个UIImageView,分别用来保存图片的上、下两部分。

     */

    UIImageView *imageViewUp;

    UIImageView *imageViewDown;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    // Do any additional setup after loading the view, typically from a nib.

    imageViewUp = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1"]];

    //设置折叠的锚点

    imageViewUp.layer.anchorPoint = CGPointMake(0.5, 1);

    imageViewUp.frame = CGRectMake(10, 100, 300, 150);

    //设置imageView的内容为图片的上半部分

    imageViewUp.layer.contentsRect = CGRectMake(0, 0, 1, 0.5);

    

    [self.view addSubview:imageViewUp];

    

    imageViewDown = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1"]];

    imageViewDown.layer.anchorPoint = CGPointMake(0.5, 0);

    imageViewDown.frame = CGRectMake(10, 250, 300, 150);

    imageViewDown.layer.contentsRect = CGRectMake(0, 0.5, 1, 0.5);

    

    [self.view addSubview:imageViewDown];

    

    

    //添加一个透明浮层,用来捕捉手指滑动。

    UIView *clearView = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 300, 300)];

    clearView.backgroundColor = [UIColor clearColor];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

    [clearView addGestureRecognizer:pan];

    clearView.userInteractionEnabled = YES;

    clearView.tag = 100;

    [self.view addSubview:clearView];


}


- (void)pan:(UIPanGestureRecognizer *)ges

{

    

    if (ges.state == UIGestureRecognizerStateChanged) {

        UIView *clearView = (UIView *)[imageViewUp viewWithTag:100];

        CGPoint point = [ges translationInView:clearView];

        //计算旋转角度,拉动距离568时旋转90度。

        float R = -point.y*M_PI_2/568.0f;

        CATransform3D tran = CATransform3DIdentity;

        //设置折叠视角,使之更有立体感

        tran.m34 = -1.0/500.0;

        imageViewUp.layer.transform = CATransform3DRotate(tran, R, 1, 0, 0);

    }

    else if(ges.state == UIGestureRecognizerStateEnded)

    {

        //当松开手指时,图片状态恢复。

        [UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{

            imageViewUp.layer.transform = CATransform3DIdentity;

        } completion:^(BOOL finished) {

            nil;

        }];

    }

}


2016-09-01 22:34:01 qq_30513483 阅读数 1243
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    3812 人正在学习 去看看 缪传海

在Github看到一个老外写的一个3D折叠效果的侧滑菜单demo,效果很不错,想收藏起来为以后项目开发所用。老外的demo是Swift版的,趁最近比较有时间安静下来学习,于是,我决定把它封装成OC版的。


先看看效果


LeftMenuGif.gif

原理

1、使用storyboard来创建整个UI框架,能比较直观地看到这个结构其实很简单


UI框架.png

2、主要由左侧列表控制器MenuViewController 和右边的内容控制器DetailViewController构成,这两个控制器分别接上一个导航控制器后分别连到ContainerviewController上。

  • 下面是ContainerviewController视图布局,通过scrollView作为容器来操作左右滑动

    主视图.png
  • scrollView记得打开PagingEnabled

PagingEnabled
  • 其中右边的Container宽度为屏幕的宽度,这样就能通过左右滑动改变scrollViewcontentOffset值来显示或者隐藏左边的菜单

ContainerviewController.png

代码(部分关键代码)

1、ContainerViewController.m

在storyboard里面拖出scrollview和左边的menuContainerView这个两个属性,在viewDidLayoutSubviews里面设置menuContainerViewanchorPoint

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    self.menuContainView.layer.anchorPoint = CGPointMake(1.0, 0.5);

    [self hideOrShowMenu:NO animated:NO]; //初始化为隐藏菜单

}

控制menuContainerView展开或者隐藏,并且在上面的viewDidLayoutSubviews方法里面初始化为隐藏状态

- (void)hideOrShowMenu:(BOOL)isShow animated:(BOOL)isAnimated
{
    CGFloat xOffset = CGRectGetWidth(self.menuContainView.bounds);

    CGPoint contentOffset = isShow?CGPointZero:CGPointMake(xOffset, 0);

    //通过设置contentOffset来隐藏或者显示菜单
    [self.scorllView setContentOffset:contentOffset animated:isAnimated];

    _isShow = isShow;

}

在scrollView的scrollViewDidScroll代理方法里面设置左右滑动的判断以及3D效果

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    CGFloat multiplier = 1.0 / CGRectGetWidth(self.menuContainView.bounds);

    CGFloat offset = scrollView.contentOffset.x * multiplier;

    CGFloat fraction = 1.0 - offset;

    self.menuContainView.layer.transform = [self transformForFraction:fraction];

    self.menuContainView.alpha = fraction;


    HamburgerView *rotatingView = (HamburgerView *)_detailVC.hamburger;

    [rotatingView rotateWithFraction:fraction];

    scrollView.pagingEnabled = scrollView.contentOffset.x < (scrollView.contentSize.width - CGRectGetWidth(scrollView.frame));

    CGFloat menuOffset = CGRectGetWidth(self.menuContainView.bounds);

    _isShow = !CGPointEqualToPoint(CGPointMake(menuOffset, 0), scrollView.contentOffset);

}
- (CATransform3D)transformForFraction:(CGFloat)fraction
{

    CATransform3D identity = CATransform3DIdentity;

    identity.m34 = -1.0 / 1000.0;

    double angle = (1.0 - fraction) * -M_PI_2;

    CGFloat xOffset = CGRectGetWidth(self.menuContainView.bounds) * 0.5;

    CATransform3D rotateTransform = CATransform3DRotate(identity, angle, 0.0, 1.0, 0.0);

    CATransform3D translateTransform = CATransform3DMakeTranslation(xOffset, 0.0, 0.0);

    return CATransform3DConcat(rotateTransform, translateTransform);

}
2、MenuViewController.m

这是菜单tableview控制器,主要控制菜单每一项的背景图片和颜色以及点击事件

///加载plist文件中的数据资源
- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *path = [[NSBundle mainBundle]pathForResource:@"MenuItems" ofType:@"plist"];

    _dataArray = [NSArray arrayWithContentsOfFile:path];

}
///tableViewCell点击响应,这里用通知的方法来通知detailView控制器
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    NSDictionary *dict = _dataArray[indexPath.row];

    [[NSNotificationCenter defaultCenter]postNotificationName:@"KCallToShowInDetailViewNotification" object:dict];
}
3、HamburgerView.m

展开菜单的点击按钮,这里叫‘汉堡包’,哈。这个view里面需要创建一个imageView视图,还需要一个控制imageView旋转的方法,如下, (这个方法在scrollViewDidScroll中会调用到)

- (void)rotateWithFraction:(CGFloat)fraction
{
    CGFloat angle = fraction * M_PI_2;
    _imageView.transform = CGAffineTransformMakeRotation(angle);
}

小结

小结一下:这个侧滑菜单的demo,个人感觉效果还可以,灵活运用scrollview的特性,实现起来也不复杂,以后的项目中可以参照这种UI框架来实现该功能。
附上项目代码:
老外的demo:https://github.com/chris-pilcher/3D-Sidebar-Animation
我的demo:https://github.com/RanYeee/RNLeftSildeMenu

*请各位大神多多指导!



文/Rany_IOS(简书作者)
原文链接:http://www.jianshu.com/p/188b8b40aa15
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
2019-06-19 22:45:54 sxt_zls 阅读数 1135
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    3812 人正在学习 去看看 缪传海

    相比ios系统,Android的可定制性还是蛮高的,例如通知栏,ios的通知栏也是最近的几个版本中才加了一些折叠的效果,一键清除等功能,但是通知栏的高度定制在Android系统中早已经司空见惯了,今天的主题不是通知栏,而是app的快捷方式,ios和android都可以创建快捷方式,但这里要向ios学习下了,在ios中默认为每一个app添加了一个 “分享”的快捷方式,尤其是在3D Touch的加持下,快捷方式的可玩性更高

   之所以叫快捷方式,是因为用户可以在不打开app的情况下,长按app启动图标,快速打开指定的页面,非常直接的一种方式,节省了一些不必要的操作,在Android中创建快捷方式有三种方式 静态快捷方式动态快捷方式固定快捷方式

  不幸的是,这几种方式都需要在Android api 25 +  ,只能呵呵了,不过还是值得操作一通的,毕竟功能还是很实用的,注意,虽然可以添加多个快捷方式,但是静态+动态快捷方式最多只能在app启动图标上面显示四个快捷方式

  静态快捷方式,需要在清单文件中声明,注意,是在程序的入口Main里设置

 <activity
            android:name=".activity.MainActivity"
            android:configChanges="orientation|screenSize"
            android:launchMode="singleTop"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <!--创建静态快捷方式-->
            <meta-data
                android:name="android.app.shortcuts"
                android:resource="@xml/shortcuts" />
   </activity>

   另外需要创建一个新的资源文件:res/xml-v25/shortcuts.xml。这个是要显示的快捷方式布局

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:enabled="true"
        android:icon="@drawable/ic_vector_basic_info_24dp"
        android:shortcutId="个人中心"
        android:shortcutShortLabel="@string/basic_info">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.sxt.chat.activity.BasicInfoActivity"
            android:targetPackage="com.sxt.chat" />
        <categories android:name="android.shortcut.conversation" />
    </shortcut>
</shortcuts>

shortcuts节点下可以包含多个shortcut ,但是最多显示4个,shortcut中必要的字段有两个shortcutId 和 shortcutShortLabel

enabled:属性可以控制该快捷方式是否显示 。

icon:属性是该快捷方式的drawable资源 

shortcutId:属性是该快捷方式的id,只能是字符串,不能是字符串的资源id。

shortcutShortLabel:属性是该快捷方式的描述信息,只能是字符串的资源id。

shortcutLongLabel:属性是描述快捷方式扩展信息,同样也只能是字符串的资源id。如果有足够的空间,启动器会显示此值而不是shortcutShortLabel。如果可能,将快捷方式的“长描述”的长度限制为25个字符。

 

然后就是配置Intent信息,我们这里是要打开某一个activity,所以配置为具体的类名和包名

运行app看下效果

静态快捷方式是只会创建一次,由于是固定在xml文件中,所以无法动态更新,只能通过版本更新apk的方式实现shortcut的更新

动态快捷方式相对来说比较灵活,可以随时更新之前创建好的shortcut

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
            ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
            ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "动态创建的快捷方式")
                    .setShortLabel("动态创建的shortcut")
                    .setLongLabel("动态创建的shortcut-打开网页")
                    .setIcon(Icon.createWithResource(this, R.drawable.ic_ar_photo_main_blue_24dp))
                    .setIntent(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://blog.csdn.net/sxt_zls")))
                    .build();

            shortcutManager.setDynamicShortcuts(Collections.singletonList(shortcut));
        }

ShortcutInfo可以通过ShortcutInfo.Builder通过链式设置不同的属性值,与静态创建的方式属性一致,这里的Intent可以设置为任意你想要的意图,我这里设置的打开一个网页,最后shortcutManager.setDynamicShortcuts实现快捷方式的创建,后续可以调用updateShortcuts方法来修改快捷方式

可以看到,长按app启动图标,出现了我们刚刚设置的快捷方式,点击后打开了指定的网页

相比静态和动态创建的方式来说,固定快捷方式比较麻烦,因为通过固定的方式创建的shortcut会固定在手机主页上面,所以需要用户授权才能创建,当然,用户可以选择拒绝,拒绝后将无法创建该快捷方式,看下交互效果会更容易理解 

 

下图是通过动态的方式打开activity,然后申请添加快捷方式,选择自动添加或者拖动图标到主页即可添加成功

最后看下代码的实现,与动态注册类似,只不过需要设置创建之后的回调

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
            if (shortcutManager.isRequestPinShortcutSupported()) {
                Intent intent=new Intent(Intent.ACTION_VIEW,null, this, VR360Activity.class);
                ShortcutInfo pinShortcutInfo =
                        new ShortcutInfo.Builder(this, "固定的快捷方式")
                                .setShortLabel("固定的快捷方式")
                                .setIcon(Icon.createWithResource(this, R.drawable.ic_ar_photo_main_blue_24dp))
                                .setIntent(intent)
                                .build();

                Intent pinnedShortcutCallbackIntent =
                        shortcutManager.createShortcutResultIntent(pinShortcutInfo);

                //配置意图,以便应用程序的广播接收器回调成功的广播。               
                PendingIntent successCallback = PendingIntent.getBroadcast(this,  0,
                        pinnedShortcutCallbackIntent, 0);

                shortcutManager.requestPinShortcut(pinShortcutInfo,
                        successCallback.getIntentSender());
            }
        }

需要注意的是,并不是所有8.0以上的设备都支持固定模式的快捷方式,这里需要通过isRequestPinShortcutSupported()方法来进行判断目标设备是否支持该功能

2017-01-03 15:36:31 u014277565 阅读数 320
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    3812 人正在学习 去看看 缪传海

在用iOS的手机时发现京东和天猫APP中都有图片自动360的3D旋转功能,开始想如何实现这功能,通过animator是无法实现的。于是就开始上网查,结果查到了一是通过android.graphics.Camera这个类实现的,而android.graphics.Camera是封装自opengl。


下面我们来看下效果图:




最后是源代码连接:

https://github.com/left1101/Y3DAnimation

2017-06-15 11:47:16 xueer8835 阅读数 479
  • 大数据—Scala

    一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模式和Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数、函数柯里化、偏函数、参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、隐式转换、隐式参数、工厂模式、单例模式、观察者模式、装饰者模式、代理模式、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。

    3812 人正在学习 去看看 缪传海

环境:iOS 10.3  ,xcode8.3.2

创建widget:add target 






创建后 拖控件到storyboard 上 ios10 可设置展开折叠模式




- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 10.0) {

        self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;

        //        NCWidgetDisplayModeCompact

    }


    [self.extensionContext setValue:@"1" forKey:@"widgetLargestAvailableDisplayMode"];

}


-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{

    if (activeDisplayMode == NCWidgetDisplayModeCompact) {

        

        NSLog(@"maxSize-%@",NSStringFromCGSize(maxSize));// maxSize-{359, 110}

        self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 110);

    }else{

        NSLog(@"maxSize-%@",NSStringFromCGSize(maxSize));// maxSize-{359, 616}

        self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 258);

    }

}


收起时110高度,展开时可以自定义 这里是258











添加3D touch

在主project 种选择.plist 文件添加节点

<key>UIApplicationShortcutItems</key>

<array>

<dict>

<key>UIApplicationShortcutItemTitle</key>

<string>我的3d</string>

<key>UIApplicationShortcutItemIconType</key>

<string></string>

<key>UIApplicationShortcutItemType</key>

<string></string>

<key>UIApplicationShortcutItemUserInfo</key>

<dict/>

</dict>

</array>


或者



运行效果





具体数据交互要设置 app group 等等,这里不再赘述,此篇博客作为个人学习记录




Unity Learning for Day 5

阅读数 258

没有更多推荐了,返回首页