Поиск…
3D Touch с быстрым
3D touch был представлен с iPhone 6s Plus. С этим новым уровнем интерфейса добавлены два стиля: Peek и Pop.
Peek и Pop в двух словах
Peek - нажмите
Поп-пресса очень сильно
Проверка поддержки 3D
Вы должны проверить, поддерживает ли устройство поддержку 3D-касания. Вы можете сделать это путем проверки значения forceTouchCapability для объекта UITraitCollection. UITraitCollection описывает среду интерфейса iOS для вашего приложения.
if (traitCollection.forceTouchCapability == .Available) {
registerForPreviewingWithDelegate(self, sourceView: view)
}
Реализация делегата
Вам необходимо реализовать два метода UIViewControllerPreviewingDelegate в вашем классе. Один из способов - заглянуть, а другой - для поп- поведения.
Метод, который будет реализован для просмотра, представляет собой предварительный просмотрконтекста .
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = self.tableView.indexPathForRowAtPoint(location), cell = self.tableView.cellForRowAtIndexPath(indexPath) as? <YourTableViewCell> else {
return nil
}
guard let datailVC = storyboard?.instantiateViewControllerWithIdentifier("<YourViewControllerIdentifier>") as? <YourViewController> else {
return nil
}
datailVC.peekActive = true
previewingContext.sourceRect = cell.frame
// Do the stuff
return datailVC
}
Метод, который будет реализован для pop, представляет собой предварительный просмотрконтекста . :)
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
let balanceViewController = viewControllerToCommit as! <YourViewController>
// Do the stuff
navigationController?.pushViewController(balanceViewController, animated: true)
}
Как вы видите, это перегруженные методы. Вы можете использовать 3D-Touch любым способом, реализуя эти методы.
Objective-C
//Checking for 3-D Touch availability
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable))
{
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}
//Peek
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location {
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
Country *country = [self countryForIndexPath:indexPath];
if (country) {
CountryCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
if (cell) {
previewingContext.sourceRect = cell.frame;
UINavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"UYLCountryNavController"];
[self configureNavigationController:navController withCountry:country];
return navController;
}
}
return nil;
}
//Pop
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
[self showDetailViewController:viewControllerToCommit sender:self];
}
3 D Пример Touch-C-Touch
Objective-C
//Checking for 3-D Touch availability
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable))
{
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}
//Peek
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext
viewControllerForLocation:(CGPoint)location {
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
Country *country = [self countryForIndexPath:indexPath];
if (country) {
CountryCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
if (cell) {
previewingContext.sourceRect = cell.frame;
UINavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"UYLCountryNavController"];
[self configureNavigationController:navController withCountry:country];
return navController;
}
}
return nil;
}
//Pop
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
[self showDetailViewController:viewControllerToCommit sender:self];
}