FULandmarkManager.m 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // FULandmarkManager.m
  3. // FULiveDemo
  4. //
  5. // Created by 项林平 on 2021/10/9.
  6. // Copyright © 2021 FaceUnity. All rights reserved.
  7. //
  8. #import "FULandmarkManager.h"
  9. #import <FURenderKit/FURenderKit.h>
  10. #import <FURenderKit/FUFacialFeatures.h>
  11. @interface FULandmarkManager ()
  12. @property (nonatomic, strong) FUFacialFeatures *landmarksItem;
  13. @end
  14. @implementation FULandmarkManager
  15. + (FULandmarkManager *)shared {
  16. static FULandmarkManager *landmarkView;
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^{
  19. CGFloat top = 0;
  20. if (@available(iOS 11.0, *)) {
  21. top = [UIApplication sharedApplication].delegate.window.safeAreaInsets.top;
  22. }
  23. landmarkView = [[self alloc] initWithFrame:CGRectMake(10, top + 60, 50, 30)];
  24. });
  25. [landmarkView addTarget:self action:@selector(landmarkSwitchAction:) forControlEvents:UIControlEventValueChanged];
  26. return landmarkView;
  27. }
  28. + (void)show {
  29. [[UIApplication sharedApplication].delegate.window addSubview:[self shared]];
  30. }
  31. + (void)dismiss {
  32. if ([self shared].superview) {
  33. [self shared].on = NO;
  34. [[FURenderKit shareRenderKit].stickerContainer removeSticker:[self shared].landmarksItem completion:nil];
  35. [[self shared] removeFromSuperview];
  36. }
  37. }
  38. + (void)landmarkSwitchAction:(UISwitch *)sender {
  39. if (sender.isOn) {
  40. [[FURenderKit shareRenderKit].stickerContainer addSticker:[self shared].landmarksItem completion:nil];
  41. } else {
  42. [[FURenderKit shareRenderKit].stickerContainer removeSticker:[self shared].landmarksItem completion:nil];
  43. }
  44. }
  45. - (FUFacialFeatures *)landmarksItem {
  46. if (!_landmarksItem) {
  47. NSString *path = [[NSBundle mainBundle] pathForResource:@"landmarks" ofType:@"bundle"];
  48. _landmarksItem = [[FUFacialFeatures alloc] initWithPath:path name:@"landmarks"];
  49. _landmarksItem.landmarksType = FUAITYPE_FACELANDMARKS239;
  50. }
  51. return _landmarksItem;
  52. }
  53. @end