From d8458ccc91e786c78821506cb6c7f7f67174123d Mon Sep 17 00:00:00 2001 From: wsl <15324956576@163.com> Date: Mon, 9 Mar 2020 17:31:08 +0800 Subject: [PATCH 001/573] =?UTF-8?q?10.=E9=94=AE=E7=9B=98=E5=92=8CUIMenuCon?= =?UTF-8?q?troller=E7=9A=84=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOS_Tips/.DS_Store | Bin 6148 -> 6148 bytes iOS_Tips/DarkMode.xcodeproj/project.pbxproj | 18 ++++ .../UIMenuController/SLMenuViewController.h | 17 +++ .../UIMenuController/SLMenuViewController.m | 102 ++++++++++++++++++ .../UIMenuController/SLMenuViewController.xib | 58 ++++++++++ iOS_Tips/DarkMode/ViewController.m | 8 +- 6 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.h create mode 100644 iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m create mode 100644 iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib diff --git a/iOS_Tips/.DS_Store b/iOS_Tips/.DS_Store index 1c5bbf33137fe595e5148be0151fd86d36eea66e..d90b7080a2958147c22dd72df4c56cc616177001 100644 GIT binary patch delta 35 ocmZoMXffDujg9Hv_sMhEbodK041<&Na|;+ifSF;lF#AUV0O^nm7ytkO delta 35 ocmZoMXffDujg4uU$K*L|I{XD0hQZ1CxdjX$z;t1=F#AUV0M@$;00000 diff --git a/iOS_Tips/DarkMode.xcodeproj/project.pbxproj b/iOS_Tips/DarkMode.xcodeproj/project.pbxproj index 9388bade..5c27b27e 100644 --- a/iOS_Tips/DarkMode.xcodeproj/project.pbxproj +++ b/iOS_Tips/DarkMode.xcodeproj/project.pbxproj @@ -92,6 +92,8 @@ 78E179312351A4020007E4BB /* SLShotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 78E1792F2351A4020007E4BB /* SLShotViewController.m */; }; 78E179362351A40D0007E4BB /* SLEditMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 78E179332351A40D0007E4BB /* SLEditMenuView.m */; }; 78E179372351A40D0007E4BB /* SLShotFocusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 78E179342351A40D0007E4BB /* SLShotFocusView.m */; }; + 78EF8B6024162B96008D0CD7 /* SLMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 78EF8B5E24162B96008D0CD7 /* SLMenuViewController.m */; }; + 78EF8B6124162B96008D0CD7 /* SLMenuViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78EF8B5F24162B96008D0CD7 /* SLMenuViewController.xib */; }; 78F42023237915730093497C /* SLGPUImageController.m in Sources */ = {isa = PBXBuildFile; fileRef = 78F42022237915730093497C /* SLGPUImageController.m */; }; 78F54916233383D800910215 /* SLBlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = 78F54915233383D800910215 /* SLBlurView.m */; }; 78FA0F9D235407E6003E456B /* SLDrawView.m in Sources */ = {isa = PBXBuildFile; fileRef = 78FA0F9C235407E6003E456B /* SLDrawView.m */; }; @@ -255,6 +257,9 @@ 78E179332351A40D0007E4BB /* SLEditMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SLEditMenuView.m; sourceTree = ""; }; 78E179342351A40D0007E4BB /* SLShotFocusView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SLShotFocusView.m; sourceTree = ""; }; 78E179352351A40D0007E4BB /* SLEditMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLEditMenuView.h; sourceTree = ""; }; + 78EF8B5D24162B96008D0CD7 /* SLMenuViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLMenuViewController.h; sourceTree = ""; }; + 78EF8B5E24162B96008D0CD7 /* SLMenuViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SLMenuViewController.m; sourceTree = ""; }; + 78EF8B5F24162B96008D0CD7 /* SLMenuViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SLMenuViewController.xib; sourceTree = ""; }; 78F42021237915730093497C /* SLGPUImageController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLGPUImageController.h; sourceTree = ""; }; 78F42022237915730093497C /* SLGPUImageController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SLGPUImageController.m; sourceTree = ""; }; 78F54914233383D800910215 /* SLBlurView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLBlurView.h; sourceTree = ""; }; @@ -517,6 +522,7 @@ 782E3EB52373F892001E0DF9 /* Filter */, 78F4201E237913C80093497C /* GPUImageDemo */, 78777CDB238FEA15006FA671 /* OpenGL */, + 78EF8B5C24162B07008D0CD7 /* UIMenuController */, 78B10489232F57C30051579F /* Main.storyboard */, 78B1048C232F57C50051579F /* Assets.xcassets */, 78B1048E232F57C50051579F /* LaunchScreen.storyboard */, @@ -619,6 +625,16 @@ path = Recource; sourceTree = ""; }; + 78EF8B5C24162B07008D0CD7 /* UIMenuController */ = { + isa = PBXGroup; + children = ( + 78EF8B5D24162B96008D0CD7 /* SLMenuViewController.h */, + 78EF8B5E24162B96008D0CD7 /* SLMenuViewController.m */, + 78EF8B5F24162B96008D0CD7 /* SLMenuViewController.xib */, + ); + path = UIMenuController; + sourceTree = ""; + }; 78F4201E237913C80093497C /* GPUImageDemo */ = { isa = PBXGroup; children = ( @@ -779,6 +795,7 @@ 78B1048D232F57C50051579F /* Assets.xcassets in Resources */, 783FB4602394A76B0039AEFD /* shaderv.vsh in Resources */, 7851CB372331CC87002295B5 /* SLDarkModeViewController.xib in Resources */, + 78EF8B6124162B96008D0CD7 /* SLMenuViewController.xib in Resources */, 782CFB30239E04A2001B5528 /* SplitScreen_4.fsh in Resources */, 782CFB63239E623D001B5528 /* Cirlce.fsh in Resources */, 782CFB23239DFD0F001B5528 /* SplitScreen_2.fsh in Resources */, @@ -897,6 +914,7 @@ 78DAA113235FF61E00A60F64 /* SLEditVideoClipping.m in Sources */, 782E3EB42373D8C7001E0DF9 /* SLAvWriterInput.m in Sources */, 78804A7E237D5E3E0087E152 /* SLWaterMarkController.m in Sources */, + 78EF8B6024162B96008D0CD7 /* SLMenuViewController.m in Sources */, 78D30964239688EF00DC373A /* GLESUtils.m in Sources */, 784B720923348241006AEE47 /* SLAvCaptureTool.m in Sources */, 786147F42362D79000C5424C /* SLMosaicView.m in Sources */, diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.h b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.h new file mode 100644 index 00000000..4adf669c --- /dev/null +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.h @@ -0,0 +1,17 @@ +// +// SLMenuViewController.h +// DarkMode +// +// Created by wsl on 2020/3/9. +// Copyright © 2020 https://github.com/wsl2ls ----- . All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SLMenuViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m new file mode 100644 index 00000000..31758146 --- /dev/null +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m @@ -0,0 +1,102 @@ +// +// SLMenuViewController.m +// DarkMode +// +// Created by wsl on 2020/3/9. +// Copyright © 2020 https://github.com/wsl2ls ----- . All rights reserved. +// + +#import "SLMenuViewController.h" + + +@interface SLTextView : UITextView +@property (nonatomic, weak) UIResponder *overrideNextResponder; +@end +@implementation SLTextView + +- (UIResponder *)nextResponder { + if(_overrideNextResponder == nil){ + return [super nextResponder]; + } else { + return _overrideNextResponder; + } +} +- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { + if (_overrideNextResponder != nil) { + return NO; + } + return [super canPerformAction:action withSender:sender]; +} +@end + + +@interface SLLable : UILabel + +@end +@implementation SLLable +-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { + if (action == @selector(save:) || + action == @selector(note:) || + action == @selector(copy:)) { + return YES; + } + return NO; +} +- (BOOL)canBecomeFirstResponder { + return YES; +} +- (void)note:(id)sender { + +} +- (void)save:(id)sender { + +} +- (void)copy:(id)sender { + +} +@end + + +@interface SLMenuViewController () +@property (weak, nonatomic) IBOutlet SLTextView *textView; +@property (weak, nonatomic) IBOutlet SLLable *titleLabel; +@end + +@implementation SLMenuViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"键盘和UIMenuController的冲突问题"; + UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapShowMenuView:)]; + [self.titleLabel addGestureRecognizer:tapGestureRecognizer]; + +} + +- (void)tapShowMenuView:(UILongPressGestureRecognizer *)longPress { + + BOOL isFirstResponder = NO; + if(self.textView.isFirstResponder){ + self.textView.overrideNextResponder = self.titleLabel; + isFirstResponder = YES; + } + if(isFirstResponder){ + // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuDidHide:) name:UIMenuControllerDidHideMenuNotification object:nil]; + } else { + [self.titleLabel becomeFirstResponder]; + } + + UIMenuController *menuController = [UIMenuController sharedMenuController]; + if (!menuController.menuVisible) { + UIMenuItem *saveItems = [[UIMenuItem alloc] initWithTitle:@"保存" action:@selector(save:)]; + UIMenuItem *noteItem = [[UIMenuItem alloc] initWithTitle:@"笔记" action:@selector(note:)]; + menuController.menuItems = @[noteItem, saveItems]; + if (@available(iOS 13.0, *)) { + [menuController showMenuFromView:self.view rect:self.titleLabel.frame]; + } else { + [menuController setTargetRect:self.titleLabel.frame inView:self.view]; + [menuController setMenuVisible:YES animated:YES]; + } + } +} + +@end diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib new file mode 100644 index 00000000..d9edfeb9 --- /dev/null +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS_Tips/DarkMode/ViewController.m b/iOS_Tips/DarkMode/ViewController.m index ee4ac92a..5b99dbb8 100644 --- a/iOS_Tips/DarkMode/ViewController.m +++ b/iOS_Tips/DarkMode/ViewController.m @@ -13,6 +13,7 @@ #import "SLFilterViewController.h" #import "SLGPUImageController.h" #import "SLOpenGLController.h" +#import "SLMenuViewController.h" @interface ViewController () @property (nonatomic, strong) NSMutableArray *dataSource; @@ -44,7 +45,7 @@ - (void)setupUI { #pragma mark - Data - (void)getData { //tableView、UIAlertView等系统控件,在不自定义颜色的情况下,默认颜色都是动态的,支持暗黑模式 - [self.dataSource addObjectsFromArray:@[@"暗黑/光亮模式", @"AppleId三方登录应用", @"AVFoundation 高仿微信相机拍摄和编辑功能", @"AVFoundation 人脸检测", @"AVFoundation 实时滤镜拍摄和导出", @"GPUImage框架的使用", @"VideoToolBox和AudioToolBox音视频编解码", @"OpenGL-ES学习", @"LeetCode算法练习集合"]]; + [self.dataSource addObjectsFromArray:@[@"暗黑/光亮模式", @"AppleId三方登录应用", @"AVFoundation 高仿微信相机拍摄和编辑功能", @"AVFoundation 人脸检测", @"AVFoundation 实时滤镜拍摄和导出", @"GPUImage框架的使用", @"VideoToolBox和AudioToolBox音视频编解码", @"OpenGL-ES学习", @"LeetCode算法练习集合", @"键盘和UIMenuController的冲突问题"]]; [self.tableView reloadData]; } @@ -118,6 +119,11 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath NSLog(@"LeetCode算法练习集合地址:https://github.com/wsl2ls/AlgorithmSet.git"); } break; + case 9: { + SLMenuViewController *menuViewController = [[SLMenuViewController alloc] init]; + [self.navigationController pushViewController:menuViewController animated:YES]; + } + break; default: break; } From ac01fe0a0f73cd77af40e09edf39ef4d751a2622 Mon Sep 17 00:00:00 2001 From: wsl <15324956576@163.com> Date: Mon, 9 Mar 2020 18:06:23 +0800 Subject: [PATCH 002/573] =?UTF-8?q?=E9=94=AE=E7=9B=98=E5=92=8CUIMenuContro?= =?UTF-8?q?ller=E7=9A=84=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UIMenuController/SLMenuViewController.m | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m index 31758146..43bc59a7 100644 --- a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m @@ -29,9 +29,7 @@ - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { } @end - @interface SLLable : UILabel - @end @implementation SLLable -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { @@ -69,10 +67,12 @@ - (void)viewDidLoad { self.title = @"键盘和UIMenuController的冲突问题"; UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapShowMenuView:)]; [self.titleLabel addGestureRecognizer:tapGestureRecognizer]; - } -- (void)tapShowMenuView:(UILongPressGestureRecognizer *)longPress { +//点击显示菜单 +- (void)tapShowMenuView:(UITapGestureRecognizer *)tap { + + UIMenuController *menuController = [UIMenuController sharedMenuController]; BOOL isFirstResponder = NO; if(self.textView.isFirstResponder){ @@ -80,12 +80,11 @@ - (void)tapShowMenuView:(UILongPressGestureRecognizer *)longPress { isFirstResponder = YES; } if(isFirstResponder){ - // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuDidHide:) name:UIMenuControllerDidHideMenuNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuViewDidHide:) name:UIMenuControllerDidHideMenuNotification object:nil]; } else { [self.titleLabel becomeFirstResponder]; } - UIMenuController *menuController = [UIMenuController sharedMenuController]; if (!menuController.menuVisible) { UIMenuItem *saveItems = [[UIMenuItem alloc] initWithTitle:@"保存" action:@selector(save:)]; UIMenuItem *noteItem = [[UIMenuItem alloc] initWithTitle:@"笔记" action:@selector(note:)]; @@ -99,4 +98,9 @@ - (void)tapShowMenuView:(UILongPressGestureRecognizer *)longPress { } } +- (void)menuViewDidHide:(NSNotification*)notification { + self.textView.overrideNextResponder = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerDidHideMenuNotification object:nil]; +} + @end From d7671a9be7d6a6d3ca02b4a4b56a66aa163dddba Mon Sep 17 00:00:00 2001 From: wsl <15324956576@163.com> Date: Mon, 9 Mar 2020 18:49:50 +0800 Subject: [PATCH 003/573] =?UTF-8?q?=E9=94=AE=E7=9B=98=E4=B8=8EUIMenuViewCo?= =?UTF-8?q?ntroller=E5=90=8C=E6=97=B6=E5=87=BA=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UIMenuController/SLMenuViewController.m | 28 ++++++++----------- .../UIMenuController/SLMenuViewController.xib | 2 +- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m index 43bc59a7..74a3991f 100644 --- a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.m @@ -65,15 +65,12 @@ @implementation SLMenuViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"键盘和UIMenuController的冲突问题"; - UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapShowMenuView:)]; - [self.titleLabel addGestureRecognizer:tapGestureRecognizer]; + UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressShowMenuView:)]; + [self.titleLabel addGestureRecognizer:longPressGestureRecognizer]; } //点击显示菜单 -- (void)tapShowMenuView:(UITapGestureRecognizer *)tap { - - UIMenuController *menuController = [UIMenuController sharedMenuController]; - +- (void)longPressShowMenuView:(UITapGestureRecognizer *)tap { BOOL isFirstResponder = NO; if(self.textView.isFirstResponder){ self.textView.overrideNextResponder = self.titleLabel; @@ -85,16 +82,15 @@ - (void)tapShowMenuView:(UITapGestureRecognizer *)tap { [self.titleLabel becomeFirstResponder]; } - if (!menuController.menuVisible) { - UIMenuItem *saveItems = [[UIMenuItem alloc] initWithTitle:@"保存" action:@selector(save:)]; - UIMenuItem *noteItem = [[UIMenuItem alloc] initWithTitle:@"笔记" action:@selector(note:)]; - menuController.menuItems = @[noteItem, saveItems]; - if (@available(iOS 13.0, *)) { - [menuController showMenuFromView:self.view rect:self.titleLabel.frame]; - } else { - [menuController setTargetRect:self.titleLabel.frame inView:self.view]; - [menuController setMenuVisible:YES animated:YES]; - } + UIMenuController *menuController = [UIMenuController sharedMenuController]; + UIMenuItem *saveItems = [[UIMenuItem alloc] initWithTitle:@"保存" action:@selector(save:)]; + UIMenuItem *noteItem = [[UIMenuItem alloc] initWithTitle:@"笔记" action:@selector(note:)]; + menuController.menuItems = @[noteItem, saveItems]; + if (@available(iOS 13.0, *)) { + [menuController showMenuFromView:self.view rect:self.titleLabel.frame]; + } else { + [menuController setTargetRect:self.titleLabel.frame inView:self.view]; + [menuController setMenuVisible:YES animated:YES]; } } diff --git a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib index d9edfeb9..d4888635 100644 --- a/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib +++ b/iOS_Tips/DarkMode/UIMenuController/SLMenuViewController.xib @@ -31,7 +31,7 @@ -