章節(jié)
Drag & Drop除了基礎(chǔ)APIs外,還為tableView,collectionView舶替、textView提供了高級APIs,所以本系列分為以下幾個(gè)部分:
- 基礎(chǔ)視圖
- UITableView
- UICollectionView
- UISpringLoadedInteraction(本篇)
什么是Spring Load杠园?
彈性加載顾瞪?,用于Drag Drop時(shí)的動(dòng)態(tài)UI導(dǎo)航。這樣翻譯貌似也有點(diǎn)別扭陈醒,云里霧里惕橙。。钉跷。還是用個(gè)動(dòng)圖解釋什么是Spring load
圖里Drag到tableView Cell上弥鹦,cell閃爍,push到下層UI爷辙,這個(gè)過程就叫做SpringLoad彬坏,就像你在mac上拖動(dòng)文件到某個(gè)文件夾上,會(huì)導(dǎo)航進(jìn)入這個(gè)文件夾一樣膝晾。
如何使用Spring Load栓始?
- 系統(tǒng)默認(rèn)支持
iOS11 默認(rèn)支持的標(biāo)準(zhǔn)UIKit
- MKUserTrackingBarButtonItem
- PKAddPassButton
- PKPaymentButton
- UIAlertController
- UIBarButtonItem
- UIButton
- UICollectionView
- UISegmentedControl
- UITabBar
- UITabBarItem
- UITableView
對于默認(rèn)支持的控件,實(shí)現(xiàn)非常簡單玷犹,打開對應(yīng)視圖的SpringLoad開關(guān)即可混滔,例如上圖tableView:
self.tableView.springLoaded = YES;
cell原有跳轉(zhuǎn)邏輯不變洒疚。
當(dāng)然歹颓,如果需要自定義SpringLoad觸發(fā)事件(即視圖閃爍后),參考2.
- 添加自定義Spring load
這里使用UIImageView來實(shí)現(xiàn)上述UI導(dǎo)航效果油湖,代碼也很簡單:
self.springLoadImageView.frame = CGRectMake(0, CGRectGetHeight(self.view.frame)-300, CGRectGetWidth(self.view.frame), 300);
[self.view addSubview:self.springLoadImageView];
self.springLoadImageView.userInteractionEnabled = YES;
__weak __typeof(self) weakSelf = self;
UISpringLoadedInteraction *springLoadInteraction = [[UISpringLoadedInteraction alloc] initWithActivationHandler:^(UISpringLoadedInteraction * _Nonnull interaction, id<UISpringLoadedInteractionContext> _Nonnull context) {
Class cls = NSClassFromString([weakSelf.demos objectAtIndex:1][@"class"]);
UIViewController *vc = (UIViewController*)[[cls alloc] init];
[weakSelf.navigationController pushViewController:vc animated:YES];
}];
[self.springLoadImageView addInteraction:springLoadInteraction];
參考資料
文檔
視頻
- Introducing Drag and Drop
- Mastering Drag and Drop
- Drag and Drop with Collection and Table View
- Data Delivery with Drag and Drop
代碼
Tips
文章難免會(huì)有錯(cuò)誤巍扛、理解錯(cuò)位的地方乏德,請不吝指教撤奸。??