打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
3D Touch魔性入门(一)


Part1

@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.    //这是一枚可变的icon    UIMutableApplicationShortcutItem *shortItem1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"对!没错!"];    //这是icon的图片,对图片有要求哦,不符合规则显示不来哦    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"Image1"];    //给icon设置一下图片    shortItem1.icon = icon1;    UIMutableApplicationShortcutItem *shortItem2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"我就是"];    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"Image2"];    shortItem2.icon = icon2;    UIMutableApplicationShortcutItem *shortItem3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"3" localizedTitle:@"一台完美的"];    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"Image3"];    shortItem3.icon = icon3;    UIMutableApplicationShortcutItem *shortItem4 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"4" localizedTitle:[PhoneInfoManager getCurrentDeviceModel]];    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"Image4"];    shortItem4.icon = icon4;    NSArray *shortItems = [[NSArray alloc] initWithObjects:shortItem4, shortItem3, shortItem2, shortItem1, nil];    NSLog(@"%@", shortItems);    [[UIApplication sharedApplication] setShortcutItems:shortItems];    return YES;}

这就是效果!

在AppDelegate里边实现这一段代码就可以响应点击的icon的事件(可以根据shortcutItem.type判断哪个icon)

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{    //很普通的一枚Alert(Xcode7废弃了UIAlertVIew好不习惯啊)    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"讨厌,你又点了人家" message:@"你要对我负责!!!" preferredStyle:UIAlertControllerStyleAlert];    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"我会的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {    }];    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"我一定会的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {    }];    [alertController addAction:cancelAction];    [alertController addAction:okAction];    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];}

Part2

接下来就是稍微比较复杂的用3DTouch控制ViewController等UI。


轻按效果图

重按效果图

咱们先去你想要实现3DTouch的类里注册实现UIViewControllerPreviewingDelegate

@interface ViewController ()<UIViewControllerPreviewingDelegate>@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    /**     *  如果支持3DTouch,就添加3DTouch的代理     */   if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {    [self registerForPreviewingWithDelegate:self sourceView:self.view];   }    _lbl.text = [NSString stringWithFormat:@"****妈妈再也不用担心我装逼了****\n\n我的设备: %@\n\n我的内存: %.2f MB\n\n我的储空间: %qi GB\n\n********************************",[PhoneInfoManager getCurrentDeviceModel],[PhoneInfoManager logMemoryInfo],[PhoneInfoManager freeDiskSpaceInBytes]];}

然后使劲按,就会触发到事件

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)context viewControllerForLocation:(CGPoint) point{    /**     轻按     - returns: 要显示的VC     */    BaseViewController *vc = [[BaseViewController alloc] init];    vc.view.frame = self.view.frame;    UILabel *lbl = [[UILabel alloc]initWithFrame:vc.view.frame];    lbl.textColor = [UIColor whiteColor];    lbl.textAlignment = NSTextAlignmentCenter;    lbl.numberOfLines = 0;    lbl.font = [UIFont systemFontOfSize:50.0];    lbl.text = [NSString stringWithFormat:@"不要这么使劲的戳人家嘛\n\n?(? ?·?ω?·? ?)?\n\n淫家只是一台可以摸的iPhone了啦"];    vc.view = lbl;    /**     *  轻按显示VC大小范围     *     *  @param 0.0f   显示宽度(0为不限制?)     *  @param 450.0f 显示高度     *     *  @return vc     */    vc.preferredContentSize = CGSizeMake(0.0f,300.0f);    /**     *  触摸和轻按中间的过度模糊层(rect为0就没有这个效果啦!!!系统会去掉,设为float最小值会全覆盖)     *     *  @param CGFLOAT_MIN float最小值     *  @param CGFLOAT_MIN float最小值     *  @param CGFLOAT_MIN float最小值     *  @param CGFLOAT_MIN float最小值     *     *  @return 感觉像没用     */    CGRect rect = CGRectMake(CGFLOAT_MIN, CGFLOAT_MIN, CGFLOAT_MIN ,CGFLOAT_MIN);    context.sourceRect = rect;    return vc;}-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{    /**     *  重按push进去,然后3秒后移除     */    [self showViewController:viewControllerToCommit sender:self];    double delayInSeconds = 3.0;    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){        [viewControllerToCommit dismissViewControllerAnimated:YES completion:^{        }];    });}

然后你就会问了,呢个BaseViewController是干吗用的,因为3DTouch轻按时候上拉事件,必须重写将要弹出ViewController的一个方法。


轻按上划触发事件效果图
#import "BaseViewController.h"@interface BaseViewController ()<UIViewControllerPreviewingDelegate>@end@implementation BaseViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//预览页面 底部Action Items- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{    UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:@"不要酱紫" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {    }];    UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@"好了啦" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {    }];    NSArray *actions = @[p1,p2];    return actions;}

我是代码:?????https://github.com/JamesGu0116/3DTouchDoge

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS开发之3DTouch
iOS9多任务管理器效果iCarousel高级教程 – 码农网
iOS开发
Android 响应式编程 RxJava2 完全解析
lombok注解介绍
C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服