做任务i的 尿隐血医生说不用管管

如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
招聘信息:
作者: 授权本站转载。前言iOS9马上要发布了 为了我司APP的兼容性问题 特意把手上的iOS Mac XCode都升级到了最新的beta版 然后发现iOS9的多任务管理器风格大变 变成了下面这种样子我忽然想起来之前的文章提到我最爱的UI控件要实现类似这种效果其实是很简单的 一时兴起就花时间试验了一下 效果还不错 所以接下来我就介绍一下iCarousel的高级用法: 如何使用iCarousel的自定义方式来实现iOS9的多任务管理器效果模型首先来看一下iOS9的多任务管理器究竟是什么样子然后我们简单的来建个模 这个步骤很重要 将会影响我们之后的计算 首先我们把东西摆正然后按比例用线分割一下这里可以看到 如果我们以正中间的卡片(设定序号为0)为参照物的话 最右边卡片(序号为1)的位移就是中心卡片宽度的4/5 最左边的卡片(序号为-2)的位移就是中心卡片的宽度的2/5 注意:这两个值的确定对我们非常重要而大小*的缩放 就按照线性放大**就行了 由于计算很简单 这里就不多赘述了细心的人可能会注意到 其实iOS9中的中心卡片 并不是居中的 而是靠右的 那么我们再把整体布局调整一下这样就差不多是iOS9的样子了原理接着我们来了解一下iCarousel的基本原理iCarousel支持如下几种内置显示类型(没用过的同学请务必使用pod try iCarousel来运行一下demo)iCarouselTypeLineariCarouselTypeRotaryiCarouselTypeInvertedRotaryiCarouselTypeCylinderiCarouselTypeInvertedCylinderiCarouselTypeWheeliCarouselTypeInvertedWheeliCarouselTypeCoverFlowiCarouselTypeCoverFlow2iCarouselTypeTimeMachineiCarouselTypeInvertedTimeMachine具体效果图可以在官方Github主页上看到 不过这几种类型虽然好 但是也无法满足我们现在的需求 没关系 iCarousel还支持自定义类型iCarouselTypeCustom这就是我们今天的主角还是代码说话 我们先配置一个简单的iCarousel示例 并使用iCarouselTypeCustom作为其类型@interface&ViewController&()
@property&(nonatomic,&strong)&iCarousel&*
@property&(nonatomic,&assign)&CGSize&cardS
@implementation&ViewController
-&(void)viewDidLoad&{
&&&&[super&viewDidLoad];
&&&&CGFloat&cardWidth&=&[UIScreen&mainScreen].bounds.size.width*5.0f/7.0f;
&&&&self.cardSize&=&CGSizeMake(cardWidth,&cardWidth*16.0f/9.0f);
&&&&self.view.backgroundColor&=&[UIColor&blackColor];
&&&&self.carousel&=&[[iCarousel&alloc]&initWithFrame:[UIScreen&mainScreen].bounds];
&&&&[self.view&addSubview:self.carousel];
&&&&self.carousel.delegate&=&
&&&&self.carousel.dataSource&=&
&&&&self.carousel.type&=&iCarouselTypeC
&&&&self.carousel.bounceDistance&=&0.2f;
-&(NSInteger)numberOfItemsInCarousel:(iCarousel&*)carousel
&&&&return&15;
-&(CGFloat)carouselItemWidth:(iCarousel&*)carousel
&&&&return&self.cardSize.
-&(UIView&*)carousel:(iCarousel&*)carousel&viewForItemAtIndex:(NSInteger)index&reusingView:(UIView&*)view
&&&&UIView&*cardView&=&
&&&&if&(&!cardView&)
&&&&&&&&cardView&=&[[UIView&alloc]&initWithFrame:CGRectMake(0,&0,&self.cardSize.width,&self.cardSize.height)];
&&&&&&&&UIImageView&*imageView&=&[[UIImageView&alloc]&initWithFrame:cardView.bounds];
&&&&&&&&[cardView&addSubview:imageView];
&&&&&&&&imageView.contentMode&=&UIViewContentModeScaleAspectF
&&&&&&&&imageView.backgroundColor&=&[UIColor&whiteColor];
&&&&&&&&cardView.layer.shadowPath&=&[UIBezierPath&bezierPathWithRoundedRect:imageView.frame&cornerRadius:5.0f].CGP
&&&&&&&&cardView.layer.shadowRadius&=&3.0f;
&&&&&&&&cardView.layer.shadowColor&=&[UIColor&blackColor].CGC
&&&&&&&&cardView.layer.shadowOpacity&=&0.5f;
&&&&&&&&cardView.layer.shadowOffset&=&CGSizeMake(0,&0);
&&&&&&&&CAShapeLayer&*layer&=&[CAShapeLayer&layer];
&&&&&&&&layer.frame&=&imageView.
&&&&&&&&layer.path&=&[UIBezierPath&bezierPathWithRoundedRect:imageView.bounds&cornerRadius:5.0f].CGP
&&&&&&&&imageView.layer.mask&=&
&&&&return&cardV
}当你运行这段代码的时候哦 你会发现显示出来是下面这个样子的 并且划也划不动(掀桌:这是什么鬼~(/`Д′)/~ ??)这是因为我们有个最重要的delegate方法没有实现-&(CATransform3D)carousel:(iCarousel&*)carousel&itemTransformForOffset:(CGFloat)offset这个函数也是整个iCarouselTypeCustom的灵魂所在接下来我们要简单的说一下iCarousel的原理iCarousel并不是一个UIScrollView 也并没有包含任何UIScrollView作为subViewiCarousel通过UIPanGestureRecognizer来计算和维护scrollOffset这个变量iCarousel通过scrollOffset来驱动整个动画过程iCarousel本身并不会改变itemView的位置 而是靠修改itemView的layer.transform来实现位移和形变可能文字说得不太清楚 我们还是通过代码来看一下-&(UIView&*)carousel:(iCarousel&*)carousel&viewForItemAtIndex:(NSInteger)index&reusingView:(UIView&*)view
&&&&UIView&*cardView&=&
&&&&if&(&!cardView&)
&&&&&&&&cardView&=&[[UIView&alloc]&initWithFrame:CGRectMake(0,&0,&self.cardSize.width,&self.cardSize.height)];
&&&&&&&&...
&&&&&&&&...
&&&&&&&&//添加一个lbl
&&&&&&&&UILabel&*lbl&=&[[UILabel&alloc]&initWithFrame:cardView.bounds];
&&&&&&&&lbl.text&=&[@(index)&stringValue];
&&&&&&&&[cardView&addSubview:lbl];
&&&&&&&&lbl.font&=&[UIFont&boldSystemFontOfSize:200];
&&&&&&&&lbl.textAlignment&=&NSTextAlignmentC
&&&&return&cardV
-&(CATransform3D)carousel:(iCarousel&*)carousel&itemTransformForOffset:(CGFloat)offset&baseTransform:(CATransform3D)transform
&&&&NSLog(@"%f",offset);
&&&&return&
}然后滑动的时候打出的日志是类似这样的&16:53:22.330&DemoTaskTray[]&-2.999739
&16:53:22.331&DemoTaskTray[]&2.000261
&16:53:22.331&DemoTaskTray[]&-1.999739
&16:53:22.331&DemoTaskTray[]&3.000261
&16:53:22.331&DemoTaskTray[]&-0.999739
&16:53:22.332&DemoTaskTray[]&0.000261
&16:53:22.332&DemoTaskTray[]&1.000261
&16:53:22.346&DemoTaskTray[]&-3.000000
&16:53:22.347&DemoTaskTray[]&2.000000
&16:53:22.347&DemoTaskTray[]&-2.000000
&16:53:22.348&DemoTaskTray[]&3.000000
&16:53:22.348&DemoTaskTray[]&-1.000000
&16:53:22.348&DemoTaskTray[]&0.000000
&16:53:22.348&DemoTaskTray[]&1.000000
&16:53:22.363&DemoTaskTray[]&-3.000000
&16:53:22.363&DemoTaskTray[]&2.000000
&16:53:22.363&DemoTaskTray[]&-2.000000
&16:53:22.363&DemoTaskTray[]&3.000000
&16:53:22.364&DemoTaskTray[]&-1.000000
&16:53:22.364&DemoTaskTray[]&0.000000
&16:53:22.364&DemoTaskTray[]&1.000000可以看到 所有的itemView都是居中并且重叠在一起的 我们滑动的时候并不会改变itemView的位置 但是这个offset是会改变的 而且可以看到 所有的offset的相邻差值都为1.0这就是iCarousel的一个重要的设计理念 iCarousel虽然跟UIScrollView一样都各自会维护自己的scrollOffset 但是UIScrollView在滑动的时候改变的是自己的ViewPort 就是说 UIScrollView上的itemView是真正被放置到了他被设置的位置上 只是UIScrollView通过移动显示的窗口 造成了滑动的感觉(如果不理解 请看)但是iCarousel并不是这样 iCarousel会把所有的itemView都居中重叠放置在一起 当scrollOffset变化时 iCarousel会计算每个itemView的offset 并通过- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform这个函数来对每个itemView进行形变 通过形变来造成滑动的效果这个非常大胆和另类的想法着实很奇妙! 可能我解释得不够好(尽力了~~) 还是通过代码来解释比较好我们修改一下函数的实现-&(CATransform3D)carousel:(iCarousel&*)carousel&itemTransformForOffset:(CGFloat)offset&baseTransform:(CATransform3D)transform
&&&&NSLog(@"%f",offset);
&&&&return&CATransform3DTranslate(transform,&offset&*&self.cardSize.width,&0,&0);
}效果如下我们可以看到 已经可以滑动了 而且这个效果 就是类似iCarouselTypeLinear的效果没错 其实iCarousel所有的内置类型也都是通过这种方式来实现的 只是分别根据offset进行了不同的形变 就造成了各种不同的效果要说明的是 函数仅提供offset作为参数 并没有提供index来指明对应的是哪一个itemView 这样的好处是可以让人只关注于具体的形变计算 而无需计算与currentItemView之间的距离之类的注意的是offset是元单位(就是说 offset是不包含宽度的 仅仅是用来说明itemView的偏移系数) 下图简单说明了一下当没有滑动的时候 offset是这样的当滑动的时候 offset是这样的怎么样 知道了原理之后 是不是有种跃跃欲试的感觉? 接下来我们就回到主题上 看看如何一步步实现我们想要的效果计算通过刚才原理的介绍 可以知道 接下来的重点就是关于offset的计算我们首先来确定一下函数的曲线图 通过观察iOS9的实例效果我们可以知道 itemView从左向右滑的时候是越来越快的所以这个曲线大概是这个样子的考验你高中数学知识的时候到了 怎么找到这种函数?有种叫的函数 大概公式是这个样子其曲线图是这样的可以看到 位于第二象限的曲线就是我们要的样子 但是我们还要调整一下才能得到最终的结果由于offset为0的时候 本身是不形变的 所以可以知道曲线是过原点(0,0)的 那么我们可以得到函数的一般式而在文章开头我们得到了这样两组数据最右边卡片(序号为1)的位移就是中心卡片宽度的4/5最左边的卡片(序号为-2)的位移就是中心卡片的宽度的2/5那么代入上面的一般式中 我们可以得到两个公式计算可以得到a=5/4b=5/8然后我们就可以得到我们最终想要的公式看看曲线图然后我们修改一下程序代码(这段代码其实就是本文的关键所在)-&(CATransform3D)carousel:(iCarousel&*)carousel&itemTransformForOffset:(CGFloat)offset&baseTransform:(CATransform3D)transform
&&&&CGFloat&scale&=&[self&scaleByOffset:offset];
&&&&CGFloat&translation&=&[self&translationByOffset:offset];
&&&&return&CATransform3DScale(CATransform3DTranslate(transform,&translation&*&self.cardSize.width,&0,&0),&scale,&scale,&1.0f);
-&(void)carouselDidScroll:(iCarousel&*)carousel
&&&&for&(&UIView&*view&in&carousel.visibleItemViews)
&&&&&&&&CGFloat&offset&=&[carousel&offsetForItemAtIndex:[carousel&indexOfItemView:view]];
&&&&&&&&if&(&offset&<&-3.0&)
&&&&&&&&&&&&view.alpha&=&0.0f;
&&&&&&&&else&if&(&offset&=这个值时&我们就把itemView放到比较远的地方不让他显示在屏幕上就可以了
&&&&if&(&offset&>=&z/n&)
&&&&&&&&return&2.0f;
&&&&return&1/(z-n*offset)-1/z;
}再看看效果看上去已经是我们想要的效果了不过 滑动一下就会发现问题原来虽然itemView的大小和位移都按照我们的预期变化了 但是层级出现了问题 那么iCarousel是如何调整itemView的层级的呢? 查看源码我们可以知道NSComparisonResult&compareViewDepth(UIView&*view1,&UIView&*view2,&iCarousel&*self)
&&&&//compare&depths
&&&&CATransform3D&t1&=&view1.superview.layer.
&&&&CATransform3D&t2&=&view2.superview.layer.
&&&&CGFloat&z1&=&t1.m13&+&t1.m23&+&t1.m33&+&t1.m43;
&&&&CGFloat&z2&=&t2.m13&+&t2.m23&+&t2.m33&+&t2.m43;
&&&&CGFloat&difference&=&z1&-&z2;
&&&&//if&depths&are&equal,&compare&distance&from¤t&view
&&&&if&(difference&==&0.0)
&&&&&&&&CATransform3D&t3&=&[self¤tItemView].superview.layer.
&&&&&&&&if&(self.vertical)
&&&&&&&&&&&&CGFloat&y1&=&t1.m12&+&t1.m22&+&t1.m32&+&t1.m42;
&&&&&&&&&&&&CGFloat&y2&=&t2.m12&+&t2.m22&+&t2.m32&+&t2.m42;
&&&&&&&&&&&&CGFloat&y3&=&t3.m12&+&t3.m22&+&t3.m32&+&t3.m42;
&&&&&&&&&&&&difference&=&fabs(y2&-&y3)&-&fabs(y1&-&y3);
&&&&&&&&else
&&&&&&&&&&&&CGFloat&x1&=&t1.m11&+&t1.m21&+&t1.m31&+&t1.m41;
&&&&&&&&&&&&CGFloat&x2&=&t2.m11&+&t2.m21&+&t2.m31&+&t2.m41;
&&&&&&&&&&&&CGFloat&x3&=&t3.m11&+&t3.m21&+&t3.m31&+&t3.m41;
&&&&&&&&&&&&difference&=&fabs(x2&-&x3)&-&fabs(x1&-&x3);
&&&&return&(difference&<&0.0)?&NSOrderedAscending:&NSOrderedD
-&(void)depthSortViews
&&&&for&(UIView&*view&in&[[_itemViews&allValues]&sortedArrayUsingFunction:(NSInteger&(*)(id,&id,&void&*))compareViewDepth&context:(__bridge&void&*)self])
&&&&&&&&[_contentView&bringSubviewToFront:view.superview];
}主要就是这个compareViewDepth的比较函数起作用 而这个函数中比较的就是CATransform3D的各个属性值我们来看一下CATransform3D的各个属性各代表什么struct&CATransform3D
CGFloat&&&&&m11(x缩放),&&&&&m12(y切变),&&&&&m13(旋转),&&&&&m14();
CGFloat&&&&&m21(x切变),&&&&&m22(y缩放),&&&&&m23(),&&&&&m24();
CGFloat&&&&&m31(旋转),&&&&&&m32(&),&&&&&&&&m33(),&&&&&m34(透视);
CGFloat&&&&&m41(x平移),&&&&&m42(y平移),&&&&&m43(z平移),&&&&&m44();
};而所有CATransform3D开头的函数(比如CATransform3DScale CATransform3DTranslate) 改变的也就是这些值而已回到整体 我们发现这个函数先比较的是t1.m13 + t1.m23 + t1.m33 + t1.m43; 而m13代表的是旋转 m23和m33暂时并没有含义 而m43代表的是z平移 那么我们只要改变m43就可以了 而改变m43最简单的办法就是CATransform3D&CATransform3DTranslate&(CATransform3D&t,&CGFloat&tx,CGFloat&ty,&CGFloat&tz)最后一个参数就是用来改变m43的那么我们把之前iCarousel的delegate方法稍微改动一下 将当前的offset设置给最后一个参数即可(因为offset就是按顺序传进来的)return&CATransform3DScale(CATransform3DTranslate(transform,&translation&*&self.cardSize.width,&0,&offset),&scale,&scale,&1.0f);再看看效果Bang!我们已经得到了一个简单的copycat小结文中的可以在这里找到可以看到 使用iCarousel 我们仅用不到100行就实现了一个非常不错的效果(关键代码不到50行) 而无需做很多额外的工作(当然大家就不要揪细节了 比如以渐隐代替模糊 最后一张卡片居中等问题 毕竟这不是个轮子 只是教大家一种方法)如果大家真正读懂了这篇文章(可能我写得不是很清楚 建议看demo 同时读iCarousel的源码来理解) 那么只要遇到类似卡片滑动的组件 都可以轻松应对了说到这里 我个人是非常不喜欢重复造轮子的 能用最少的代码达到所需的要求是我一直以来的准则 而且很多经典的轮子库(比如iCarousel)也值得你去深入探索和学习 了解作者的想法和思路(站在巨人的肩膀)是一种非常不错的学习方法和开阔视野的途径另外 文中所用到的数学公式曲线图生成网站是(从那瞄到的) 数学公式生成网站是(直接把前者的公式复制到后者的输入框里就可以了 因为前者复制出来就是latex格式的公式了) 有需要的同学可以研究一下如何使用 (打算研究一下Matlab的用法 可能更方便)
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量4849点击量4404点击量3835点击量3456点击量3217点击量3180点击量3133点击量2980点击量2812
&2016 Chukong Technologies,Inc.
京公网安备89?App Store 上的“Any.do:待办事项和日历”
只能在 iOS 设备上的 App Store 获取此 App。
●新任务页面(令人惊叹)●新提醒(比以往更简单)●改进的子任务体验(拖放)●新Apple Watch版本●将剪贴板中的列表导入Any.do●在Any.do和Alexa之间同步所有列表!●Siri和提醒集成 - 请Siri“提醒我......”并将其添加到Any.do●包含日历事件和任务的小组件顺便说一句,App Store评论对我们非常有帮助。如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们非常感谢。谢谢
● NEW Task Page (Stunning)● NEW Reminders (Simpler than ever)● UPGRADED Sub-tasks experience (with Drag & Drop) ● NEW Apple Watch version● IMPORT lists from your clipboard into Any.do ● SYNC all your lists between Any.do & Alexa! ● SIRI & REMINDERS integration - Ask Siri &Remind me to...& and she'll add it to Any.do ● Widget with your calendar events & tasks By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it. Thanks
●新任务页面(令人惊叹)●新的提醒(比以往更简单)●升级的子任务体验(使用拖放)●全新Apple Watch版本●从剪贴板导入Any.do的IMPORT列表●在Any.do和Alexa之间同步您的所有列表!●SIRI&REMINDERS集成 - 请问Siri“提醒我......”,她会将它添加到Any.do●您的日历活动和任务的小工具顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。 谢谢
● NEW Apple Watch app is here!● IMPORT lists from your clipboard into Any.do ● NEW iPad experience ● SYNC all your lists between Any.do & Alexa! ● SIRI & REMINDERS integration - Ask Siri &Remind me to...& and she'll add it to Any.do ● NEW Widget with your calendar events & tasks ● TONS of bug fixes and improvements in Sync, Apple reminders and more!By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it. Thanks
● NEW Apple Watch app is here!● IMPORT lists from your clipboard into Any.do ● NEW iPad experience ● SYNC all your lists between Any.do & Alexa! ● SIRI & REMINDERS integration - Ask Siri &Remind me to...& and she'll add it to Any.do ● NEW Widget with your calendar events & tasks ● TONS of bug fixes and improvements in Sync, Apple reminders and more!By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it. Thanks
●新Apple Watch应用程序在这里!●从剪贴板导入Any.do的IMPORT列表●全新的iPad体验●在Any.do和Alexa之间同步您的所有列表!●SIRI&REMINDERS集成 - 请问Siri“提醒我......”,她会将它添加到Any.do●带有日历事件和任务的新窗口小部件●错误修复和改进顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●将列表复制到剪贴板并轻松将其导入到Any.do中●全新的Apple Watch应用程序,现在带有并发症●全新的iPad体验●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 请问Siri“提醒我......”,她会将它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务●各种错误修复(瞬间,智能卡,翻译,提醒同步等)顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●将列表复制到剪贴板并轻松将其导入到Any.do中●全新的Apple Watch应用程序,现在带有并发症●全新的iPad体验●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 请问Siri“提醒我......”,她会将它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务●各种错误修复(瞬间,智能卡,翻译,提醒同步等)顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●令人惊叹的Apple Watch应用终于来了!●全新的iPad体验●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 请问Siri“提醒我......”,她会将它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●全新的iPad体验●快速添加可以更快地添加任务●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●全新的iPad体验●快速添加可以更快地添加任务●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●全新的iPad体验●快速添加可以更快地添加任务●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●全新的iPad体验●快速添加可以更快地添加任务●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
● Add tasks faster with the all new Quick Add● Brand new theme, font & checkboxes● Works perfectly with iOS 11● Works perfectly on iPhone X● All new app icon● Try Any.do Moment 2.0 with Calendar integration● Any.do & Alexa can now sync ALL your lists!● Siri & Reminders integration - Ask Siri &Remind me to...& and she'll add it to Any.do● Stunning Calendar Widget with your events & tasks● MANY stability improvements & bug fixes By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it.Thanks
●快速添加可以更快地添加任务●全新的主题,字体和复选框●与iOS 11完美兼容●在iPhone X上完美工作●所有新的应用程序图标●使用日历集成,尝试Any.do Moment 2.0●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务●许多稳定性改进和错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
●快速添加可以更快地添加任务●全新的主题,字体和复选框●与iOS 11完美兼容●在iPhone X上完美工作●所有新的应用程序图标●每年订阅7天●使用日历集成,尝试Any.do Moment 2.0●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务●许多稳定性改进和错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
快速添加可以更快地添加任务和提醒●新的主题,字体和复选标记的设计●与iOS 11完美兼容●在iPhone X上完美工作●新的应用程序图标●每年订阅7天●使用日历集成,尝试Any.do Moment 2.0●Any.do和Alexa现在可以同步您的所有列表!●Siri&Reminders整合 - 问Siri“提醒我......”,她会把它添加到Any.do中●令人惊叹的日历小工具与您的事件和任务●许多稳定性改进和错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意花点时间写一篇评论吗? 我们将不胜感激。谢谢
● For users who experienced a crash in the last version - It's now fixed.● Siri & Reminders integration - Ask Siri &Remind me to...& and she'll add it to Any.do● Stunning Calendar Widget with your events & tasks● Amazon Alexa improvements● Now you can choose your default list in the settings● Pick your own reminder sound● Stability improvements & various bug fixes By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it.Thanks
iOS 11 is finally here! Check out the latest:● Siri & Reminders integration - Ask Siri &Remind me to...& and she'll add it to Any.do● Stunning Calendar Widget with your events & tasks● Amazon Alexa improvements● Now you can choose your default list in the settings● Pick your own reminder sound● Stability improvements & various bug fixes By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it.Thanks
iOS 11终于到了! 查看最新:●Siri&Reminders整合 - Ask Siri“提醒我...”,并将其添加到Any.do●令人惊叹的日历小部件与您的事件和任务●亚马逊Alexa改进●现在可以在设置中选择默认列表●选择自己的提醒声●稳定性改进和各种错误修复顺便说一句,App Store评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意一下写一个评论吗? 我们非常感激。谢谢
Big announcements are coming soon! In the meanwhile, the new version includes:● Amazon Alexa improvements ● Siri & Reminders integration - Ask Siri &Remind me to...& and she'll add it to Any.do● Awesome Widget with Calendar events & Tasks● Choose your default list in Settings● Pick your own reminder sound● Stability improvements● Various bug fixes By the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it.Thanks
大公告即将推出! 同时,新版本包括:●亚马逊Alexa改进●Siri&Reminders整合 - Ask Siri“提醒我...”,并将其添加到Any.do●具有日历事件和任务的令人敬畏的小部件●在“设置”中选择默认列表●选择您自己的提醒声●稳定性提高●各种错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意一下写一个评论吗? 我们非常感激。谢谢
你好! 新版本包括:●Siri&Reminders整合 - 您现在可以询问Siri“提醒我...”,她将自动添加到Any.do●具有日历事件和任务的令人敬畏的小部件●在“设置”中选择默认列表●选择您自己的提醒声●稳定性提高●各种错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意一下写一个评论吗? 我们非常感激。谢谢
你好! 新版本包括:●Siri&Reminders整合 - 您现在可以询问Siri“提醒我...”,她将自动添加到Any.do●具有日历事件和任务的令人敬畏的小部件●在“设置”中选择默认列表●选择您自己的提醒声●稳定性提高●各种错误修复顺便说一句,App Store的评论对我们非常有帮助。 如果你认为Any.do是值得的,你会介意一下写一个评论吗? 我们非常感激。谢谢
版本 4.20.3
● NEW Task Page (Stunning)● NEW Reminders (Simpler than ever)● UPGRADED Sub-tasks experience (with Drag & Drop) ● NEW Apple Watch version● IMPORT lists from your clipboard into Any.do ● SYNC all your lists between Any.do & Alexa! ● SIRI & REMINDERS integration - Ask Siri &Remind me to...& and she'll add it to Any.do ● Widget with your calendar events & tasksBy the way, App Store reviews are very helpful to us. If you think Any.do is worthy, would you mind taking a moment to write a review? We’d greatly appreciate it. Thanks
4.8(满分 5 分)
1.5K 个评分
1.5K 个评分
编辑、追踪和分享每日任务。
编辑、追踪和分享每日任务。
但希望增加一个功能:重复提醒可以间隔小时或者分钟来提醒,而不是现在这样只能选择按天或者按周重复。因为某些事情只提醒一次还是容易忘记,希望可以像Due那样重复提醒。
但希望增加一个功能:重复提醒可以间隔小时或者分钟来提醒,而不是现在这样只能选择按天或者按周重复。因为某些事情只提醒一次还是容易忘记,希望可以像Due那样重复提醒。
界面简介,功能实用,上手快。这是有点。如果硬要找缺点的话就是稍微有点“冷”,不算太活泼。其实这些都不重要,最重要的是使用者个人是否能把做计划和执行计划养成习惯。
界面简介,功能实用,上手快。这是有点。如果硬要找缺点的话就是稍微有点“冷”,不算太活泼。其实这些都不重要,最重要的是使用者个人是否能把做计划和执行计划养成习惯。
集中管理您的凭证、票券、卡片及更多。
启用“家人共享”后,此 App 最多可供 6 名家庭成员使用。

参考资料

 

随机推荐