From 46a0116c4440acf0763bc4cfed1a0daee3275b1b Mon Sep 17 00:00:00 2001 From: pikacode Date: Mon, 15 Oct 2018 15:16:01 +0800 Subject: [PATCH] update --- .DS_Store | Bin 8196 -> 8196 bytes EBBannerView/.DS_Store | Bin 6148 -> 6148 bytes EBBannerView/Classes/EBBannerView.m | 104 ++-- EBBannerView/Classes/EBBannerView.xib | 126 ++++- EBBannerView/Classes/EBBannerViewMaker.m | 87 +--- EBBannerView/Classes/EBBannerWindow.m | 1 - EBBannerView/Classes/EBCustomBannerView.m | 7 +- EBBannerView/EBBannerView.h | 36 +- demo/.DS_Store | Bin 8196 -> 8196 bytes demo/Pods/.DS_Store | Bin 6148 -> 6148 bytes .../Classes/EBBannerView+Categories.h | 36 -- .../Classes/EBBannerView+Categories.m | 99 ---- .../EBBannerView/Classes/EBBannerView.m | 269 ---------- .../EBBannerView/Classes/EBBannerView.xib | 472 ------------------ .../Classes/EBBannerViewController.m | 45 -- .../Classes/EBBannerViewController.xib | 23 - .../EBBannerView/Classes/EBBannerViewMaker.m | 47 -- .../EBBannerView/Classes/EBBannerWindow.h | 15 - .../EBBannerView/Classes/EBBannerWindow.m | 82 --- .../EBBannerView/Classes/EBCustomBannerView.m | 240 --------- .../EBBannerView/Classes/EBEmptyWindow.h | 12 - .../EBBannerView/Classes/EBEmptyWindow.m | 16 - .../EBBannerView/Classes/EBMuteDetector.h | 16 - .../EBBannerView/Classes/EBMuteDetector.m | 63 --- .../EBBannerView/Classes/EBMuteDetector.mp3 | Bin 1706 -> 0 bytes .../EBBannerView/EBBannerView/EBBannerView.h | 62 --- .../EBBannerView/EBBannerViewController.h | 16 - .../EBBannerView/EBCustomBannerView.h | 48 -- demo/Pods/EBBannerView/LICENSE | 21 - demo/Pods/EBBannerView/README.md | 219 -------- .../UserInterfaceState.xcuserstate | Bin 88665 -> 88766 bytes demo/demo/.DS_Store | Bin 8196 -> 8196 bytes 32 files changed, 223 insertions(+), 1939 deletions(-) delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.xib delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.xib delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewMaker.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBCustomBannerView.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.m delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.m delete mode 100755 demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.mp3 delete mode 100644 demo/Pods/EBBannerView/EBBannerView/EBBannerView.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/EBBannerViewController.h delete mode 100644 demo/Pods/EBBannerView/EBBannerView/EBCustomBannerView.h delete mode 100644 demo/Pods/EBBannerView/LICENSE delete mode 100644 demo/Pods/EBBannerView/README.md diff --git a/.DS_Store b/.DS_Store index 9609e6d345cc7e3af310190d089cc961c6ad54fb..279e78bad28dd82620881e4a09cc918022923a1f 100644 GIT binary patch delta 136 zcmZp1XmQx^Sb*`=wRN*52MWtG&YrwR@DG_?G5`Qi C3M`iZ diff --git a/EBBannerView/.DS_Store b/EBBannerView/.DS_Store index 38ab43915a65b6b51c930977ac981a5d8191464c..7b133a4aa52f4b2cfa9b3dacb98a015cda137bbe 100644 GIT binary patch delta 71 zcmZoMXffCj&cb+Vas*3*mSlCcp`n?Mg07*ZMXioPwS|eHj)J+lX>Bbhhq$Vtt!F}R bWmR=eZQZO%tn!SrH!H9{W!lWn@s}R}@Lm;@ delta 96 zcmZoMXffCj&cb+Nas*3*hj?|hk)?%>f{9VBjzYD$p{b67nUQgAEhmS#s-dlCLT+VM gbxm#E3 9) { + self.contentLabel.numberOfLines = 1; + } [sharedWindow.rootViewController.view addSubview:self]; self.frame = CGRectMake(self.fixedX, -self.standardHeight, self.fixedWidth, self.standardHeight); - WEAK_SELF(weakSelf); - [UIView animateWithDuration:_maker.animationDuration animations:^{ + CGFloat damping = _maker.style == 9 ? 1 : kAnimationDamping; + [UIView animateWithDuration:_maker.showAnimationDuration delay:0 usingSpringWithDamping:damping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ + weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight); } completion:^(BOOL finished) { - _hideTimer = [NSTimer scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration target:weakSelf selector:@selector(hide) userInfo:nil repeats:NO]; + + EBBannerView *strongSelf = weakSelf; + strongSelf->_hideTimer = [NSTimer scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration target:weakSelf selector:@selector(hide) userInfo:nil repeats:NO]; }]; } @@ -108,30 +124,16 @@ +(void)showWithContent:(NSString*)content{ }] show]; } -+(void)clearMemoryForStyle:(EBBannerViewStyle)style{ - // next version to do -} - -+(void)clearMemories{ - // next version to do -} - - - - - - - - #pragma mark - private +(instancetype)bannerViewWithStyle:(EBBannerViewStyle)style{ - __block EBBannerView *bannerView; - [sharedBannerViews enumerateObjectsUsingBlock:^(EBBannerView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.maker.style == style) { - bannerView = obj; + EBBannerView *bannerView; + for (EBBannerView *view in sharedBannerViews) { + if (view.maker.style == style) { + bannerView = view; + break; } - }]; + } if (bannerView == nil) { NSArray *views = [[NSBundle bundleForClass:self.class] loadNibNamed:@"EBBannerView" owner:nil options:nil]; NSUInteger index = MIN(style - 9, views.count - 1); @@ -145,9 +147,11 @@ +(instancetype)bannerViewWithStyle:(EBBannerViewStyle)style{ -(void)hide{ WEAK_SELF(weakSelf); - [UIView animateWithDuration:_maker.animationDuration animations:^{ - weakSelf.frame = CGRectMake(weakSelf.fixedX, -weakSelf.standardHeight, weakSelf.fixedWidth, weakSelf.standardHeight); + [UIView animateWithDuration:_maker.hideAnimationDuration delay:0 usingSpringWithDamping:kAnimationDamping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ + + weakSelf.frame = CGRectMake(weakSelf.fixedX, -weakSelf.standardHeight - (weakSelf.frame.size.height - weakSelf.standardHeight), weakSelf.fixedWidth, weakSelf.frame.size.height); } completion:^(BOOL finished) { + [weakSelf removeFromSuperview]; }]; } @@ -173,8 +177,14 @@ -(void)addGestureRecognizer{ } -(void)tapGesture:(UITapGestureRecognizer*)tapGesture{ - [[NSNotificationCenter defaultCenter] postNotificationName:EBBannerViewDidClickNotification object:_maker.object]; - [self hide]; + if (_maker.showDetailOrHideWhenClickLongText && !self.lineView.hidden) { + UISwipeGestureRecognizer *g = [UISwipeGestureRecognizer new]; + g.direction = UISwipeGestureRecognizerDirectionDown; + [self swipeDownGesture:g]; + } else { + [[NSNotificationCenter defaultCenter] postNotificationName:EBBannerViewDidClickNotification object:_maker.object]; + [self hide]; + } } -(void)swipeUpGesture:(UISwipeGestureRecognizer*)gesture{ @@ -185,12 +195,23 @@ -(void)swipeUpGesture:(UISwipeGestureRecognizer*)gesture{ -(void)swipeDownGesture:(UISwipeGestureRecognizer*)gesture{ if (gesture.direction == UISwipeGestureRecognizerDirectionDown && !self.lineView.hidden) { + if (UIDevice.currentDevice.systemVersion.intValue < 9 && _maker.style > 9) { + self.contentLabel.numberOfLines = 0; + } self.isExpand = YES; + self.lineView.hidden = YES; + + [_hideTimer invalidate]; + _hideTimer = nil; + _hideTimer = [NSTimer scheduledTimerWithTimeInterval:_maker.swipeDownStayDuration target:self selector:@selector(hide) userInfo:nil repeats:NO]; + WEAK_SELF(weakSelf); CGFloat originContentHeight = self.contentLabel.frame.size.height; - [UIView animateWithDuration:_maker.animationDuration animations:^{ + [UIView animateWithDuration:_maker.hideAnimationDuration delay:0 usingSpringWithDamping:kAnimationDamping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ + weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight + weakSelf.calculatedContentHeight - originContentHeight + 1); } completion:^(BOOL finished) { + weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight + weakSelf.calculatedContentHeight - originContentHeight + 1); }]; } @@ -199,22 +220,15 @@ -(void)swipeDownGesture:(UISwipeGestureRecognizer*)gesture{ #pragma mark - @property -(CGFloat)standardHeight{ - CGFloat height; switch (_maker.style) { + case EBBannerViewStyleiOS8: case EBBannerViewStyleiOS9: - height = 70; - break; + return 70; case EBBannerViewStyleiOS10: - height = 90; - break; case EBBannerViewStyleiOS11: - height = 90; - break; - default: - height = 70; - break; + case EBBannerViewStyleiOS12: + return 90; } - return height; } -(CGFloat)calculatedContentHeight{ diff --git a/EBBannerView/Classes/EBBannerView.xib b/EBBannerView/Classes/EBBannerView.xib index ba9f8e9..b508981 100644 --- a/EBBannerView/Classes/EBBannerView.xib +++ b/EBBannerView/Classes/EBBannerView.xib @@ -1,10 +1,10 @@ - + - + @@ -157,7 +157,7 @@ @@ -348,5 +348,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EBBannerView/Classes/EBBannerViewMaker.m b/EBBannerView/Classes/EBBannerViewMaker.m index 142886a..2df7972 100644 --- a/EBBannerView/Classes/EBBannerViewMaker.m +++ b/EBBannerView/Classes/EBBannerViewMaker.m @@ -9,61 +9,32 @@ @implementation EBBannerViewMaker --(EBBannerViewStyle)style{ - if (!_style) { - _style = MAX(UIDevice.currentDevice.systemVersion.intValue, 9); ++(instancetype)defaultMaker{ + EBBannerViewMaker *maker = [EBBannerViewMaker new]; + maker.style = MAX(UIDevice.currentDevice.systemVersion.intValue, 9); + maker.icon = [UIImage imageNamed:@"AppIcon40x40"] ?: [UIImage imageNamed:@"AppIcon60x60"] ?: [UIImage imageNamed:@"AppIcon80x80"]; + NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; + maker.title = [infoDictionary objectForKey:@"CFBundleDisplayName"] ?: [infoDictionary objectForKey:@"CFBundleName"]; + maker.date = NSLocalizedString(@"现在", nil); + maker.content = @""; + maker.showAnimationDuration = 0.3; + maker.hideAnimationDuration = 0.5; + maker.stayDuration = 4; + maker.swipeDownStayDuration = 4; + maker.soundID = 1312; + maker.vibrateOnMute = YES; + maker.showDetailOrHideWhenClickLongText = YES; + return maker; +} + +-(void)setStyle:(EBBannerViewStyle)style{ + if (style < 9) { + _style = EBBannerViewStyleiOS9; + } else if (style > 12) { + _style = EBBannerViewStyleiOS12; + } else { + _style = style; } - return _style; -} - --(UIImage *)icon{ - if (!_icon) { - _icon = [UIImage imageNamed:@"AppIcon40x40"] ?: [UIImage imageNamed:@"AppIcon60x60"] ?: [UIImage imageNamed:@"AppIcon80x80"]; - } - return _icon; -} - --(NSString *)title{ - if (!_title) { - NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; - _title = [infoDictionary objectForKey:@"CFBundleDisplayName"] ?: [infoDictionary objectForKey:@"CFBundleName"]; - } - return _title ?: @""; -} - --(NSString *)date{ - if (!_date) { - _date = NSLocalizedString(@"现在", nil); - } - return _date; -} - --(NSString *)content{ - if (!_content) { - _content = @""; - } - return _content; -} - --(NSTimeInterval)animationDuration{ - if (!_animationDuration) { - _animationDuration = 0.3; - } - return _animationDuration; -} - --(NSTimeInterval)stayDuration{ - if (!_stayDuration) { - _stayDuration = 4; - } - return _stayDuration; -} - --(UInt32)soundID{ - if (_soundID == 0) { - _soundID = 1312; - } - return _soundID; } -(id)object{ @@ -73,12 +44,4 @@ -(id)object{ return _object; } --(BOOL)vibrateOnMute{ - static dispatch_once_t once; - dispatch_once(&once, ^{ - _vibrateOnMute = YES; - }); - return _vibrateOnMute; -} - @end diff --git a/EBBannerView/Classes/EBBannerWindow.m b/EBBannerView/Classes/EBBannerWindow.m index d0549a0..1dbc1a2 100644 --- a/EBBannerView/Classes/EBBannerWindow.m +++ b/EBBannerView/Classes/EBBannerWindow.m @@ -24,7 +24,6 @@ +(instancetype)sharedWindow{ sharedWindow.layer.masksToBounds = NO; UIWindow *originKeyWindow = UIApplication.sharedApplication.keyWindow; [sharedWindow makeKeyAndVisible]; - [originKeyWindow makeKeyAndVisible]; /* fix bug: EBBannerViewController setSupportedInterfaceOrientations -> Portrait diff --git a/EBBannerView/Classes/EBCustomBannerView.m b/EBBannerView/Classes/EBCustomBannerView.m index 132cde5..46e7ed5 100644 --- a/EBBannerView/Classes/EBCustomBannerView.m +++ b/EBBannerView/Classes/EBCustomBannerView.m @@ -98,8 +98,9 @@ -(void)show{ }else{ soundID = _maker.soundID; } + WEAK_SELF(weakSelf); [[EBMuteDetector sharedDetecotr] detectComplete:^(BOOL isMute) { - if (isMute && _maker.vibrateOnMute) { + if (isMute && weakSelf.maker.vibrateOnMute) { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); }else{ AudioServicesPlaySystemSound(soundID); @@ -146,8 +147,8 @@ -(void)show{ [UIView animateWithDuration:_maker.animationDuration animations:^{ weakSelf.maker.view.frame = [weakSelf showFrame]; } completion:^(BOOL finished) { - if (_maker.stayDuration > 0) { - [NSTimer eb_scheduledTimerWithTimeInterval:_maker.stayDuration block:^(NSTimer *timer) { + if (weakSelf.maker.stayDuration > 0) { + [NSTimer eb_scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration block:^(NSTimer *timer) { [weakSelf hide]; } repeats:NO]; } diff --git a/EBBannerView/EBBannerView.h b/EBBannerView/EBBannerView.h index 08ec246..deafdc5 100644 --- a/EBBannerView/EBBannerView.h +++ b/EBBannerView/EBBannerView.h @@ -9,9 +9,11 @@ #import typedef enum : NSInteger { + EBBannerViewStyleiOS8 = 8, EBBannerViewStyleiOS9 = 9, EBBannerViewStyleiOS10 = 10, - EBBannerViewStyleiOS11 = 11 + EBBannerViewStyleiOS11 = 11, + EBBannerViewStyleiOS12 = 12 } EBBannerViewStyle; @protocol EBCustomBannerViewProtocol; @@ -26,10 +28,10 @@ typedef enum : NSInteger { +(instancetype)bannerWithBlock:(void(^)(EBBannerViewMaker *make))block; -(void)show; -// next version to do: -//release shared banner -+(void)clearMemoryForStyle:(EBBannerViewStyle)style; -+(void)clearMemories; +//u don't have to call hide, this only use for (long_text && forbidAutoHiddenWhenSwipeDown = YES) +-(void)hide; + ++(instancetype)current;//can be nil @end @@ -40,31 +42,17 @@ typedef enum : NSInteger { @property(nonatomic, strong)NSString *title;//default is app name @property(nonatomic, strong)NSString *date;//default is "now" = "现在" @property(nonatomic, strong)NSString *content; -@property(nonatomic, assign)NSTimeInterval animationDuration;//default is 0.3 +@property(nonatomic, assign)NSTimeInterval showAnimationDuration;//default is 0.3 +@property(nonatomic, assign)NSTimeInterval hideAnimationDuration;//default is 0.5 @property(nonatomic, assign)NSTimeInterval stayDuration;//default is 4.0 +@property(nonatomic, assign)NSTimeInterval swipeDownStayDuration;//default is 4.0 @property(nonatomic, strong)id object;//default is content @property(nonatomic, assign)UInt32 soundID;//default is 1312 @property(nonatomic, strong)NSString *soundName; @property(nonatomic, assign)BOOL vibrateOnMute;//default is YES +@property(nonatomic, assign)BOOL showDetailOrHideWhenClickLongText;//default is YES showDetail - -// next version to do -/* - coverLastOnes: - YES: new banner will cover last ones by animation - NO: new banner will instead last one, which will disappear immediately - - e.g. - set 'NO' set 'YES' - show:"aaa" [banner_A "aaa"](shared) [banner_A "aaa"](shared) - show:"bbb" [banner_A "bbb"] [banner_B "bbb"] - show:"ccc" [banner_A "ccc"] [banner_C "ccc"] or [banner_A "ccc"](if A is hidden) - B will be released after hidding - - show:"ddd" [banner_A "ddd"] [banner_D "ddd"] or [banner_A "ddd"] (if A is hidden) - B,C will be released after hidding - */ -@property(nonatomic, assign)BOOL coverLastOnes;//default is NO ++(instancetype)defaultMaker; @end diff --git a/demo/.DS_Store b/demo/.DS_Store index ee6882fa0f50b49979f03d80fd1664dc8b18085d..d450982139c53639d3f3912abd2d4bd7c65dea47 100644 GIT binary patch delta 336 zcmZp1XmOa}&nUJrU^hRb*km37d&X0feFPf3B&(|p4b5~EbPX*nYIPKt->40V5-XX5fd?FlzQ@5y6v8u2KvE4EYQx3~3CR3^@#` z40;U33`q>SKz=HN0fPxcB7-@Q1rkXCs&fTG69#9`oc!dZoctu9Spp0UjIEQ;342rD XeUC-XGHqs;_{L&OnLi(koMHk1)7e9( delta 155 zcmZp1XmOa}&nUVvU^hRb=wu!Nd&U!!3q%?;#H*`K40IF>Elg{56spb5fov0Fv)Wot z4slgOThD~t%Bt#`+PWE&r9|Z!XKoe~JjpaUT7+}5jfgShNstMe64lj)h9*EGEG_XG bF%xXWtj$)UXPG88gl}e-_{Oraf}I%v%j+&_ diff --git a/demo/Pods/.DS_Store b/demo/Pods/.DS_Store index a0051f3fce10f7dd7eaf55df819a1ad53b37e6b2..983efd3615637b8ff9fef3520657e11feedd4843 100644 GIT binary patch delta 91 zcmZoMXfc=|#>B)qu~2NHo}wr#0|Nsi1A_nqLn=cNL$PO0esWUI#=_-{jI5L6Sf@=k sV-eiU%ErXBu_1_gGdl-A2T+_yh^%1-0JNPG-T(jq delta 431 zcmZoMXfc=|#>B!ku~2NHo}wrR0|Nsi1A_nqLmm*OG88d{F=TFbWM0l(50c_xaAj}; z!bD_gpt5q$oc!dZoctu98lYarRv@kM9}IvjJo=K#iwmIoP9+uOWEPhg7+hy$VrF4w zW9Q)D;^5-tiVe=lFApxMPb?`dc1kRY25|!tOEQw6?2!EY95_2MDJ(O!JYGP=IX|x? zF*7f<2&_9ZB^9V7COk7QCBNJ$zceqU7;H{3M1q5ZlY=u}K(e~p(7@C{N5R<4yjDk{ z+T0w-HZeAxqp4^=g^^-RdEtg5c5t(yh*6$2wMsK9_9O2eqxKnBjRDhn>k%gN76 z2dZJ5%)>N|jlmkooUwTY6ED+db`E|HU~~Y3{5$hxei26wpcPCYV>d^LtYHQKFx6>E diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.h b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.h deleted file mode 100644 index 8158f5b..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// EBBannerView+Categories.h -// demo -// -// Created by pikacode@qq.com on 2017/10/20. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import "EBBannerView.h" - -#define WEAK_SELF(weakSelf) __weak __typeof(&*self)weakSelf = self; -#define ScreenWidth [UIScreen mainScreen].bounds.size.width -#define ScreenHeight [UIScreen mainScreen].bounds.size.height - -@interface EBBannerView (EBCategory) - -+(UIImage*)defaultIcon; -+(NSString*)defaultTitle; -+(NSString*)defaultDate; -+(NSTimeInterval)defaultAnimationTime; -+(NSTimeInterval)defaultStayTime; -+(UInt32)defaultSoundID; - -@end - -@interface NSTimer (EBCategory) - -+ (NSTimer *)eb_scheduledTimerWithTimeInterval:(NSTimeInterval)interval block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats; - -@end - -@interface UIImage (EBBannerViewCategory) - -+(UIColor *)colorAtPoint:(CGPoint)point; - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.m deleted file mode 100644 index 323acb3..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView+Categories.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// EBBannerView+Categories.m -// demo -// -// Created by pikacode@qq.com on 2017/10/20. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import "EBBannerView+Categories.h" -#import "EBBannerView.h" - -@implementation EBBannerView (EBCategory) - -+(UIImage*)defaultIcon{ - return [UIImage imageNamed:@"AppIcon40x40"] ?: [UIImage imageNamed:@"AppIcon60x60"] ?: [UIImage imageNamed:@"AppIcon80x80"]; -} - -+(NSString*)defaultTitle{ - NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; - return [infoDictionary objectForKey:@"CFBundleDisplayName"] ?: [infoDictionary objectForKey:@"CFBundleName"]; -} - -+(NSString*)defaultDate{ - return NSLocalizedString(@"现在", nil); -} - -+(NSTimeInterval)defaultAnimationTime{ - return 0.3; -} - - -+(NSTimeInterval)defaultStayTime{ - return 4; -} - -+(UInt32)defaultSoundID{ - return 1312; -} - --(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ - if (CGRectContainsPoint(self.frame, point)) { - return self; - }else{ - return [super hitTest:point withEvent:event]; - } -} - -@end - -@implementation NSTimer (EBCategory) - -+ (void)_eb_ExecBlock:(NSTimer *)timer { - if ([timer userInfo]) { - void (^block)(NSTimer *timer) = (void (^)(NSTimer *timer))[timer userInfo]; - block(timer); - } -} -+ (NSTimer *)eb_scheduledTimerWithTimeInterval:(NSTimeInterval)interval block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats { - return [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(_eb_ExecBlock:) userInfo:[block copy] repeats:repeats]; -} - -@end - -@implementation UIImage (EBBannerViewCategory) - -+(UIColor *)colorAtPoint:(CGPoint)point{ - UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow]; - UIGraphicsBeginImageContext(screenWindow.frame.size);//全屏截图,包括window - [screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); - if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, viewImage.size.width, viewImage.size.height), point)) { - return nil; - } - NSInteger pointX = trunc(point.x); - NSInteger pointY = trunc(point.y); - CGImageRef cgImage = viewImage.CGImage; - NSUInteger width = viewImage.size.width; - NSUInteger height = viewImage.size.height; - viewImage = nil; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - int bytesPerPixel = 4; - int bytesPerRow = bytesPerPixel * 1; - NSUInteger bitsPerComponent = 8; - unsigned char pixelData[4] = { 0, 0, 0, 0 }; - CGContextRef context = CGBitmapContextCreate(pixelData, 1, 1, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); - CGColorSpaceRelease(colorSpace); - CGContextSetBlendMode(context, kCGBlendModeCopy); - CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height); - CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage); - UIGraphicsEndImageContext(); - CGContextRelease(context); - CGFloat red = (CGFloat)pixelData[0] / 255.0f; - CGFloat green = (CGFloat)pixelData[1] / 255.0f; - CGFloat blue = (CGFloat)pixelData[2] / 255.0f; - CGFloat alpha = (CGFloat)pixelData[3] / 255.0f; - return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.m deleted file mode 100644 index b867050..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.m +++ /dev/null @@ -1,269 +0,0 @@ -// -// EBBannerView.m -// iOS-Foreground-Push-Notification -// -// Created by pikacode@qq.com on 0/7/21. -// Copyright © 200年 57300022@qq.com. All rights reserved. -// - -#import "EBBannerView.h" -#import "EBMuteDetector.h" -#import -#import "EBCustomBannerView.h" -#import "EBBannerView+Categories.h" -#import "EBBannerWindow.h" - -#define kAnimationDamping 0.8 - -NSString *const EBBannerViewDidClickNotification = @"EBBannerViewDidClickNotification"; - -@interface EBBannerView(){ - NSTimer *_hideTimer; -} - -@property (weak, nonatomic) IBOutlet UIImageView *imageView; -@property (weak, nonatomic) IBOutlet UILabel *titleLabel; -@property (weak, nonatomic) IBOutlet UILabel *contentLabel; -@property (weak, nonatomic) IBOutlet UILabel *dateLabel; -@property (weak, nonatomic) IBOutlet UIView *lineView; - -@property (nonatomic, assign)BOOL isExpand; -@property(nonatomic, assign, readonly)CGFloat standardHeight; -@property (nonatomic, assign, readonly)CGFloat calculatedContentHeight; - -@property (nonatomic, assign, readonly)CGFloat fixedX; -@property (nonatomic, assign, readonly)CGFloat fixedY; -@property (nonatomic, assign, readonly)CGFloat fixedWidth; - -@property(nonatomic, strong)EBBannerViewMaker *maker; - -@end - -@implementation EBBannerView - -static NSMutableArray *sharedBannerViews; -static EBBannerWindow *sharedWindow; - -#pragma mark - public - -+(instancetype)bannerWithBlock:(void(^)(EBBannerViewMaker *make))block{ - - sharedWindow = [EBBannerWindow sharedWindow]; - - EBBannerViewMaker *maker = [EBBannerViewMaker defaultMaker]; - block(maker); - maker.style = MAX(maker.style, 9); - - EBBannerView *bannerView = [EBBannerView bannerViewWithStyle:maker.style]; - - bannerView.maker = maker; - if (maker.style == EBBannerViewStyleiOS9) { - bannerView.dateLabel.textColor = [[UIImage colorAtPoint:bannerView.dateLabel.center] colorWithAlphaComponent:0.7]; - CGPoint lineCenter = bannerView.lineView.center; - bannerView.lineView.backgroundColor = [[UIImage colorAtPoint:CGPointMake(lineCenter.x, lineCenter.y - 7)] colorWithAlphaComponent:0.5]; - } - return bannerView; -} - -+(instancetype)current{ - EBBannerView *view = sharedWindow.rootViewController.view.subviews.lastObject; - if ([view isKindOfClass:[EBBannerView class]] && view.superview) { - return view; - } else { - return nil; - } -} - --(void)show{ - if (_hideTimer) { - [_hideTimer invalidate]; - _hideTimer = nil; - } - SystemSoundID soundID = _maker.soundID; - if (_maker.soundName) { - NSURL *url = [[NSBundle mainBundle] URLForResource:_maker.soundName withExtension:nil]; - AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); - } - WEAK_SELF(weakSelf); - [[EBMuteDetector sharedDetecotr] detectComplete:^(BOOL isMute) { - if (isMute && weakSelf.maker.vibrateOnMute) { - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); - }else{ - AudioServicesPlaySystemSound(soundID); - } - }]; - - self.imageView.image = _maker.icon; - self.titleLabel.text = _maker.title; - self.dateLabel.text = _maker.date; - self.contentLabel.text = _maker.content; - self.lineView.hidden = self.calculatedContentHeight < 34; - //iOS8 使用新样式label显示bug - if (UIDevice.currentDevice.systemVersion.intValue < 9 && _maker.style > 9) { - self.contentLabel.numberOfLines = 1; - } - - [sharedWindow.rootViewController.view addSubview:self]; - - self.frame = CGRectMake(self.fixedX, -self.standardHeight, self.fixedWidth, self.standardHeight); - - CGFloat damping = _maker.style == 9 ? 1 : kAnimationDamping; - [UIView animateWithDuration:_maker.showAnimationDuration delay:0 usingSpringWithDamping:damping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ - - weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight); - } completion:^(BOOL finished) { - - EBBannerView *strongSelf = weakSelf; - strongSelf->_hideTimer = [NSTimer scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration target:weakSelf selector:@selector(hide) userInfo:nil repeats:NO]; - }]; -} - -+(void)showWithContent:(NSString*)content{ - [[EBBannerView bannerWithBlock:^(EBBannerViewMaker *make) { - make.content = content; - }] show]; -} - -#pragma mark - private - -+(instancetype)bannerViewWithStyle:(EBBannerViewStyle)style{ - EBBannerView *bannerView; - for (EBBannerView *view in sharedBannerViews) { - if (view.maker.style == style) { - bannerView = view; - break; - } - } - if (bannerView == nil) { - NSArray *views = [[NSBundle bundleForClass:self.class] loadNibNamed:@"EBBannerView" owner:nil options:nil]; - NSUInteger index = MIN(style - 9, views.count - 1); - bannerView = views[index]; - [[NSNotificationCenter defaultCenter] addObserver:bannerView selector:@selector(applicationDidChangeStatusBarOrientationNotification) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; - [bannerView addGestureRecognizer]; - [sharedBannerViews addObject:bannerView]; - } - return bannerView; -} - --(void)hide{ - WEAK_SELF(weakSelf); - [UIView animateWithDuration:_maker.hideAnimationDuration delay:0 usingSpringWithDamping:kAnimationDamping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ - - weakSelf.frame = CGRectMake(weakSelf.fixedX, -weakSelf.standardHeight - (weakSelf.frame.size.height - weakSelf.standardHeight), weakSelf.fixedWidth, weakSelf.frame.size.height); - } completion:^(BOOL finished) { - - [weakSelf removeFromSuperview]; - }]; -} - --(void)applicationDidChangeStatusBarOrientationNotification{ - if (!self.superview) { - return; - } - self.frame = CGRectMake(self.fixedX, self.fixedY, self.fixedWidth, self.standardHeight); -} - --(void)addGestureRecognizer{ - UISwipeGestureRecognizer *swipeUpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpGesture:)]; - swipeUpGesture.direction = UISwipeGestureRecognizerDirectionUp; - [self addGestureRecognizer:swipeUpGesture]; - - UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)]; - [self addGestureRecognizer:tapGesture]; - - UISwipeGestureRecognizer *swipeDownGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDownGesture:)]; - swipeDownGesture.direction = UISwipeGestureRecognizerDirectionDown; - [self addGestureRecognizer:swipeDownGesture]; -} - --(void)tapGesture:(UITapGestureRecognizer*)tapGesture{ - if (_maker.showDetailOrHideWhenClickLongText && !self.lineView.hidden) { - UISwipeGestureRecognizer *g = [UISwipeGestureRecognizer new]; - g.direction = UISwipeGestureRecognizerDirectionDown; - [self swipeDownGesture:g]; - } else { - [[NSNotificationCenter defaultCenter] postNotificationName:EBBannerViewDidClickNotification object:_maker.object]; - [self hide]; - } -} - --(void)swipeUpGesture:(UISwipeGestureRecognizer*)gesture{ - if (gesture.direction == UISwipeGestureRecognizerDirectionUp) { - [self hide]; - } -} - --(void)swipeDownGesture:(UISwipeGestureRecognizer*)gesture{ - if (gesture.direction == UISwipeGestureRecognizerDirectionDown && !self.lineView.hidden) { - if (UIDevice.currentDevice.systemVersion.intValue < 9 && _maker.style > 9) { - self.contentLabel.numberOfLines = 0; - } - self.isExpand = YES; - self.lineView.hidden = YES; - - [_hideTimer invalidate]; - _hideTimer = nil; - _hideTimer = [NSTimer scheduledTimerWithTimeInterval:_maker.swipeDownStayDuration target:self selector:@selector(hide) userInfo:nil repeats:NO]; - - WEAK_SELF(weakSelf); - CGFloat originContentHeight = self.contentLabel.frame.size.height; - [UIView animateWithDuration:_maker.hideAnimationDuration delay:0 usingSpringWithDamping:kAnimationDamping initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ - - weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight + weakSelf.calculatedContentHeight - originContentHeight + 1); - } completion:^(BOOL finished) { - - weakSelf.frame = CGRectMake(weakSelf.fixedX, weakSelf.fixedY, weakSelf.fixedWidth, weakSelf.standardHeight + weakSelf.calculatedContentHeight - originContentHeight + 1); - }]; - } -} - -#pragma mark - @property - --(CGFloat)standardHeight{ - switch (_maker.style) { - case EBBannerViewStyleiOS8: - case EBBannerViewStyleiOS9: - return 70; - case EBBannerViewStyleiOS10: - case EBBannerViewStyleiOS11: - case EBBannerViewStyleiOS12: - return 90; - } -} - --(CGFloat)calculatedContentHeight{ - CGSize size = CGSizeMake(self.contentLabel.frame.size.width, MAXFLOAT); - NSDictionary *dict = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:self.contentLabel.font.pointSize] forKey:NSFontAttributeName]; - CGFloat calculatedHeight = [self.contentLabel.text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size.height; - return calculatedHeight; -} - --(BOOL)isiPhoneX{ - static BOOL isiPhoneX = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - CGSize size = UIScreen.mainScreen.bounds.size; - isiPhoneX = MAX(size.width, size.height) == 812; - }); - return isiPhoneX; -} - --(CGFloat)fixedX{ - return ([self isiPhoneX] && ![self isPortrait]) ? 128 : 0; -} - --(CGFloat)fixedY{ - return ([self isiPhoneX] && [self isPortrait]) ? 33 : 0; -} - --(CGFloat)fixedWidth{ - return ([self isiPhoneX] && ![self isPortrait]) ? 556 : ScreenWidth; -} - --(BOOL)isPortrait{ - return ScreenWidth < ScreenHeight; -} - -@end - - diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.xib b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.xib deleted file mode 100644 index b508981..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerView.xib +++ /dev/null @@ -1,472 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.m deleted file mode 100644 index 06bc350..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// EBBannerViewController.m -// demo -// -// Created by pikacode@qq.com on 2017/10/23. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import "EBBannerViewController.h" - -@interface EBBannerViewController () - -@end - -@implementation EBBannerViewController - -- (instancetype)init -{ - self = [self initWithNibName:@"EBBannerViewController" bundle:[NSBundle bundleForClass:self.class]]; - if (self) { - - } - return self; -} - -static UIInterfaceOrientationMask supportedOrientations; - -+(void)setSupportedInterfaceOrientations:(UIInterfaceOrientationMask)orientations{ - supportedOrientations = orientations; -} - -+(void)setStatusBarHidden:(BOOL)hidden{ - statusBarHidden = hidden; -} - --(UIInterfaceOrientationMask)supportedInterfaceOrientations{ - return supportedOrientations; -} - -static BOOL statusBarHidden; --(BOOL)prefersStatusBarHidden{ - return statusBarHidden; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.xib b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.xib deleted file mode 100644 index 96877a1..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewController.xib +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewMaker.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewMaker.m deleted file mode 100644 index 2df7972..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerViewMaker.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// EBBannerViewMaker.m -// EBBannerView -// -// Created by wxc on 2017/11/27. -// - -#import "EBBannerView.h" - -@implementation EBBannerViewMaker - -+(instancetype)defaultMaker{ - EBBannerViewMaker *maker = [EBBannerViewMaker new]; - maker.style = MAX(UIDevice.currentDevice.systemVersion.intValue, 9); - maker.icon = [UIImage imageNamed:@"AppIcon40x40"] ?: [UIImage imageNamed:@"AppIcon60x60"] ?: [UIImage imageNamed:@"AppIcon80x80"]; - NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; - maker.title = [infoDictionary objectForKey:@"CFBundleDisplayName"] ?: [infoDictionary objectForKey:@"CFBundleName"]; - maker.date = NSLocalizedString(@"现在", nil); - maker.content = @""; - maker.showAnimationDuration = 0.3; - maker.hideAnimationDuration = 0.5; - maker.stayDuration = 4; - maker.swipeDownStayDuration = 4; - maker.soundID = 1312; - maker.vibrateOnMute = YES; - maker.showDetailOrHideWhenClickLongText = YES; - return maker; -} - --(void)setStyle:(EBBannerViewStyle)style{ - if (style < 9) { - _style = EBBannerViewStyleiOS9; - } else if (style > 12) { - _style = EBBannerViewStyleiOS12; - } else { - _style = style; - } -} - --(id)object{ - if (!_object) { - _object = self.content.copy; - } - return _object; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.h b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.h deleted file mode 100644 index e8469ef..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// EBBannerWindow.h -// demo -// -// Created by pikacode@qq.com on 2017/10/23. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import - -@interface EBBannerWindow : UIWindow - -+(instancetype)sharedWindow; - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.m deleted file mode 100644 index 1dbc1a2..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBBannerWindow.m +++ /dev/null @@ -1,82 +0,0 @@ -// -// EBBannerWindow.m -// demo -// -// Created by pikacode@qq.com on 2017/10/23. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import "EBBannerWindow.h" -#import "EBBannerViewController.h" -#import "EBBannerView+Categories.h" -#import "EBEmptyWindow.h" - -@implementation EBBannerWindow - -static EBBannerWindow *sharedWindow; -static EBEmptyWindow *emptyWindow; - -+(instancetype)sharedWindow{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedWindow = [[self alloc] initWithFrame:CGRectZero]; - sharedWindow.windowLevel = UIWindowLevelAlert; - sharedWindow.layer.masksToBounds = NO; - UIWindow *originKeyWindow = UIApplication.sharedApplication.keyWindow; - [sharedWindow makeKeyAndVisible]; - - /* fix bug: - EBBannerViewController setSupportedInterfaceOrientations -> Portrait - push to a VC with orientation Left - UITextFiled's pad will show a wrong orientation with Portrait - */ - emptyWindow = [[EBEmptyWindow alloc] initWithFrame:CGRectZero]; - emptyWindow.windowLevel = UIWindowLevelAlert; - [emptyWindow makeKeyAndVisible]; - [originKeyWindow makeKeyAndVisible]; - - [EBBannerViewController setSupportedInterfaceOrientations:UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape]; - [EBBannerViewController setStatusBarHidden:NO]; - - EBBannerViewController *vc = [EBBannerViewController new]; - vc.view.backgroundColor = [UIColor clearColor]; - vc.view.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); - sharedWindow.rootViewController = vc; - }); - return sharedWindow; -} - --(instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self) { - [self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; - } - return self; -} - --(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ - __block UIView *view; - [self.rootViewController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (CGRectContainsPoint(obj.frame, point)) { - view = obj; - } - }]; - if (view) { - CGPoint point1 = [self convertPoint:point toView:view]; - return [view hitTest:point1 withEvent:event]; - }else{ - return [super hitTest:point withEvent:event]; - } -} - --(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ - if ([keyPath isEqualToString:@"frame"] && !CGRectEqualToRect(self.frame, CGRectZero)) { - self.frame = CGRectZero; - } -} - --(void)dealloc{ - [self removeObserver:self forKeyPath:@"frame"]; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBCustomBannerView.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBCustomBannerView.m deleted file mode 100644 index 46e7ed5..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBCustomBannerView.m +++ /dev/null @@ -1,240 +0,0 @@ -// -// EBCustomBannerView.m -// demo -// -// Created by pikacode@qq.com on 2017/10/20. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import "EBCustomBannerView.h" -#import "EBBannerView.h" -#import -#import "EBMuteDetector.h" -#import "EBBannerWindow.h" -#import "EBBannerView+Categories.h" - -@interface EBCustomBannerViewMaker() -@property(nonatomic, strong)UIView *view; -@end - -@implementation EBCustomBannerViewMaker -+(instancetype)makerWithView:(UIView*)view{ - EBCustomBannerViewMaker *maker = [EBCustomBannerViewMaker new]; - maker.portraitMode = EBCustomViewAppearModeTop; - maker.landscapeMode = EBCustomViewAppearModeTop; - maker.animationDuration = 0.3; - maker.stayDuration = 4.0; - maker.soundID = 0; - maker.view = view; - maker.landscapeFrame = view.frame; - maker.portraitFrame = view.frame; - maker.centerModeDurations = @[@0.3, @0.2, @0.1]; - maker.vibrateOnMute = YES; - return maker; -} -@end - -@interface EBCustomBannerView() - -@property(nonatomic, strong)EBCustomBannerViewMaker *maker; - -@end - -@implementation EBCustomBannerView - -static NSMutableArray *sharedCustomViews; -static EBBannerWindow *sharedWindow; - -+(void)sharedCustomBannerViewInit{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedWindow = [EBBannerWindow sharedWindow]; - sharedCustomViews = [NSMutableArray array]; - }); -} - -+(EBCustomBannerView*)showCustomView:(UIView*)view block:(void(^)(EBCustomBannerViewMaker *make))block{ - EBCustomBannerView *bannerView = [EBCustomBannerView customView:view block:block]; - [bannerView show]; - return bannerView; -} - -//make a custom view and show later -+(EBCustomBannerView*)customView:(UIView*)view block:(void(^)(EBCustomBannerViewMaker *make))block{ - EBCustomBannerView *bannerView = [EBCustomBannerView new]; - EBCustomBannerViewMaker *maker = [EBCustomBannerViewMaker makerWithView:view]; - bannerView.maker = maker; - block(maker); - [[NSNotificationCenter defaultCenter] addObserver:bannerView selector:@selector(applicationDidChangeStatusBarOrientationNotification) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; - return bannerView; -} - --(void)applicationDidChangeStatusBarOrientationNotification{ - if (sharedCustomViews.count == 0) { - return; - } - if ([self currentIsLandscape]) { - [sharedCustomViews enumerateObjectsUsingBlock:^(EBCustomBannerView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - obj.maker.view.frame = obj.maker.landscapeFrame; - }]; - }else{ - [sharedCustomViews enumerateObjectsUsingBlock:^(EBCustomBannerView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - obj.maker.view.frame = obj.maker.portraitFrame; - }]; - } -} - --(void)show{ - - [EBCustomBannerView sharedCustomBannerViewInit]; - - [sharedCustomViews addObject:self]; - - if (_maker.soundName || _maker.soundID != 0) { - SystemSoundID soundID; - if (_maker.soundName) { - NSURL *url = [[NSBundle mainBundle] URLForResource:_maker.soundName withExtension:nil]; - AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); - }else{ - soundID = _maker.soundID; - } - WEAK_SELF(weakSelf); - [[EBMuteDetector sharedDetecotr] detectComplete:^(BOOL isMute) { - if (isMute && weakSelf.maker.vibrateOnMute) { - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); - }else{ - AudioServicesPlaySystemSound(soundID); - } - }]; - } - - [sharedWindow.rootViewController.view addSubview:_maker.view]; - - - if ([self currentAppearMode] == EBCustomViewAppearModeCenter) { - dispatch_async(dispatch_get_main_queue(), ^{ - WEAK_SELF(weakSelf); - UIView *view = weakSelf.maker.view; - view.frame = [weakSelf showFrame]; - view.alpha = 0; - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[0].doubleValue animations:^{ - view.alpha = 1; - }]; - view.alpha = 0; - - view.layer.shouldRasterize = YES; - view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.4, 0.4); - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[1].doubleValue animations:^{ - view.alpha = 1; - view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1); - } completion:^(BOOL finished) { - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[2].doubleValue delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - view.alpha = 1; - view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1); - } completion:^(BOOL finished2) { - view.layer.shouldRasterize = NO; - if (weakSelf.maker.stayDuration > 0) { - [NSTimer eb_scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration block:^(NSTimer *timer) { - [weakSelf hide]; - } repeats:NO]; - } - }]; - }]; - }); - } else { - _maker.view.frame = [self hideFrame]; - WEAK_SELF(weakSelf); - [UIView animateWithDuration:_maker.animationDuration animations:^{ - weakSelf.maker.view.frame = [weakSelf showFrame]; - } completion:^(BOOL finished) { - if (weakSelf.maker.stayDuration > 0) { - [NSTimer eb_scheduledTimerWithTimeInterval:weakSelf.maker.stayDuration block:^(NSTimer *timer) { - [weakSelf hide]; - } repeats:NO]; - } - }]; - } -} - --(void)hide{ - if (!self.maker.view.superview) { - return; - } - if ([self currentAppearMode] == EBCustomViewAppearModeCenter) { - - dispatch_async(dispatch_get_main_queue(), ^{ - WEAK_SELF(weakSelf); - UIView *view = weakSelf.maker.view; - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[0].doubleValue animations:^{ - view.alpha = 0; - }]; - - view.layer.shouldRasterize = YES; - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[2].doubleValue animations:^{ - view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1); - } completion:^(BOOL finished){ - [UIView animateWithDuration:weakSelf.maker.centerModeDurations[1].doubleValue delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - view.alpha = 0; - view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.4, 0.4); - } completion:^(BOOL finished){ - [view removeFromSuperview]; - [sharedCustomViews removeObject:weakSelf]; - }]; - }]; - }); - - } else { - WEAK_SELF(weakSelf); - [UIView animateWithDuration:_maker.animationDuration animations:^{ - weakSelf.maker.view.frame = [weakSelf hideFrame]; - } completion:^(BOOL finished) { - if (weakSelf.maker.view.superview) { - [weakSelf.maker.view removeFromSuperview]; - } - if ([sharedCustomViews containsObject:weakSelf]) { - [sharedCustomViews removeObject:weakSelf]; - } - }]; - } -} - --(BOOL)currentIsLandscape{ - return UIDeviceOrientationIsLandscape(UIDevice.currentDevice.orientation); -} - --(CGRect)showFrame{ - return [self currentIsLandscape] ? _maker.landscapeFrame : _maker.portraitFrame; -} - --(CGRect)hideFrame{ - CGRect hideFrame = [self showFrame]; - switch ([self currentAppearMode]) { - case EBCustomViewAppearModeTop: - hideFrame.origin.y = -hideFrame.size.height; - break; - case EBCustomViewAppearModeLeft: - hideFrame.origin.x = -hideFrame.size.width; - break; - case EBCustomViewAppearModeRight: - hideFrame.origin.x = ScreenWidth + hideFrame.size.width; - break; - case EBCustomViewAppearModeBottom: - hideFrame.origin.y = ScreenHeight; - break; - case EBCustomViewAppearModeCenter: - break; - default: - break; - } - return hideFrame; -} - --(EBCustomBannerViewAppearMode)currentAppearMode{ - return [self currentIsLandscape] ? _maker.landscapeMode : _maker.portraitMode; -} - --(void)dealloc{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.h b/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.h deleted file mode 100644 index dd56e08..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// EBEmptyWindow.h -// EBBannerView -// -// Created by WTSD on 2018/1/10. -// - -#import - -@interface EBEmptyWindow : UIWindow - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.m deleted file mode 100644 index 492fe95..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBEmptyWindow.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// EBEmptyWindow.m -// EBBannerView -// -// Created by WTSD on 2018/1/10. -// - -#import "EBEmptyWindow.h" - -@implementation EBEmptyWindow - --(UIWindowLevel)windowLevel{ - return UIWindowLevelAlert; -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.h b/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.h deleted file mode 100644 index 42f23e3..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// EBMuteSwitchDetector.h -// -// Created by 57380422@qq.com on 6/2/13. -// Copyright (c) 2013 57380422@qq.com. All rights reserved. -// - -#import - -@interface EBMuteDetector : NSObject - -+(EBMuteDetector*)sharedDetecotr; - --(void)detectComplete:(void (^)(BOOL isMute))completionHandler; - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.m b/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.m deleted file mode 100644 index 63d6281..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// EBMuteSwitchDetector.m -// -// Created by 57380422@qq.comon 6/2/13. -// Copyright (c) 2013 57380422@qq.com. All rights reserved. -// - -#import "EBMuteDetector.h" -#import -#import - -@interface EBMuteDetector() - -@property (nonatomic,assign) NSTimeInterval interval; - -@property (nonatomic,assign) SystemSoundID soundId; - - -typedef void (^DetectCompleteBlock)(BOOL isMute); - -@property(nonatomic, copy)DetectCompleteBlock completeBlock; - -@end - -@implementation EBMuteDetector - -void EBSoundMuteNotificationCompletionProc(SystemSoundID ssID,void* clientData){ - NSTimeInterval elapsed = [NSDate timeIntervalSinceReferenceDate] - [EBMuteDetector sharedDetecotr].interval; - BOOL isMute = elapsed < 0.1; - [EBMuteDetector sharedDetecotr].completeBlock(isMute); -} - -+(EBMuteDetector*)sharedDetecotr{ - static EBMuteDetector* sharedDetecotr = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedDetecotr = [EBMuteDetector new]; - NSURL* url = [[NSBundle bundleForClass:[self class]] URLForResource:@"EBMuteDetector" withExtension:@"mp3"]; - if (AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &sharedDetecotr->_soundId) == kAudioServicesNoError){ - AudioServicesAddSystemSoundCompletion(sharedDetecotr.soundId, CFRunLoopGetMain(), kCFRunLoopDefaultMode, EBSoundMuteNotificationCompletionProc,(__bridge void *)(self)); - UInt32 yes = 1; - AudioServicesSetProperty(kAudioServicesPropertyIsUISound, sizeof(sharedDetecotr.soundId),&sharedDetecotr->_soundId,sizeof(yes), &yes); - } else { - sharedDetecotr.soundId = -1; - } - }); - return sharedDetecotr; -} - --(void)detectComplete:(void (^)(BOOL isMute))completionHandler{ - self.interval = [NSDate timeIntervalSinceReferenceDate]; - AudioServicesPlaySystemSound(self.soundId); - self.completeBlock = completionHandler; -} - --(void)dealloc{ - if (self.soundId != -1){ - AudioServicesRemoveSystemSoundCompletion(self.soundId); - AudioServicesDisposeSystemSoundID(self.soundId); - } -} - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.mp3 b/demo/Pods/EBBannerView/EBBannerView/Classes/EBMuteDetector.mp3 deleted file mode 100755 index ece3352dbb507dcbb573301daf473358852c0201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1706 zcmds%`B&0e7{>1xP|(E4T}nZ7J0*&UTcZU9rb%jwrPi3Zw73t6X-?u+?osNHEtHfU z&8((vN;~G7tx6W9X_F{AX0~AF=(v67Tb(n1#60)hbDsOT?|aWZ&kwIR%MlF_L1ZqI zvmP<_h=&(FfdKH4y$|p}GDrku5CEb<1mgH00Xc=i0%{R8h`NUw26O${4oD;Zdt+rl zqwrkZ5n)>*H-sI4;3eNN4N#Fq16*$|4S^cpVQkW9(lK9dzy==#VZS2>q>9U7`+j?m z0RZ(sIaA@e@+bgM7>N6hX@sNj@+WwQX_{OIW_4p`_?JU9ba$#Y22_dr**6pHt~KX~ zauhQM??Zs0PQtdRX2?b_U|E~V+OZ7!wlWS03t>@EVaxOgZS?B~gACE`KND?m0r8Q(-X?Nasm6pFKI->7 zYwUBV6RY@R^wI+n&qrh);d_kLnEu>Ncr@c#@(-(rMzeys`Wl&=#i?8H63-_q_n5Ss zr3IAFA>Xp8+`{ft#+Rd|C#s8!T|Y2Lqz8ElW!b}bjwLCEB5v`M`<)c;yf;AmoY*;N z+Xw8>ttS4h^baunHAC*R3Se~ecb)z8JoHiJu*Y80EW?oK>PaX|GAmp*Eye#CKHH@dz|GEBx5OR~vIXxyh`!;4+2rvA-X@*AQ9nx;ZaPCxqZXcq46FmD6 zgRQ+`Rq!o;dw^(}PtkEt z*e^$~gu54I#{tkX;~efGLILz)UB*F2*YNuo9h|zei>I``=afNl$Ec*&d}qo{S$a}S z#R05*yXy2bR;JE+M%-|(>q`635jY`X`{)!rxn|zl{(|I$theWp# zke`NHT3po}Q4m1Xmy|*$;+U3No&6v$xp28Wonl&Qw63wl@=3jrM+Tr{&X)$(eIxPmEbkfA4+qe3f#a;$0wQ_GultBw=2cEp~J{mzu7~zxp|ZnC!s{h`d&MX<5}ed&B)bK`9Pww03AX z>ZL=TH`>biPK9)6)lT>;VN>aN6p}v+$^Vh9?}7)wh1L|}>&TFZ-pQ;#43;S?Y+R_# zs1oy1t)RonO6%48OWYryr|cq_5StG59qnCPNeGq_`9;RYX^ifKt+01b6zllNQ$DxELlF_{8s4XUzPPZFHr2YXb0K&k_puPJ0?_Skl!lM-Vs8t4=1L!2 zBY|jpOiDZDeomV4+{(5>^w4c@hDn)}Zh}^;5p7TG(SK#UG|7|_m5frvH6#?*y{IlS z7Z@kC5JcBU>1WEu_X4q>t*(*f-0K1DX-E8rf97KyPxUjq`}A{nut-e*pmhTUU54mv zfWiDxA6?oXb*!Ub3rnvFMch!XyPn~ykMOqBC@-<$0_wE%l4T498 z;0wbABNNV!pL{#G0tcXQjj5*e+4+~XeoQMP8%tTD@07I*-%n|4>MC45V0Yb8F_f=) z@vLHoj9!{ef}y-N@KY@y*y!OfXsEfFVM74qmfecnZ~1Fvq9Q$>exfVDmfiK2J8F - -typedef enum : NSInteger { - EBBannerViewStyleiOS8 = 8, - EBBannerViewStyleiOS9 = 9, - EBBannerViewStyleiOS10 = 10, - EBBannerViewStyleiOS11 = 11, - EBBannerViewStyleiOS12 = 12 -} EBBannerViewStyle; - -@protocol EBCustomBannerViewProtocol; -@class EBCustomBannerView, EBBannerViewMaker; - -@interface EBBannerView : UIView - -//show system version style with default values -+(void)showWithContent:(NSString*)content; - -//get a specific style banner, customize values below, then call 'show' -+(instancetype)bannerWithBlock:(void(^)(EBBannerViewMaker *make))block; --(void)show; - -//u don't have to call hide, this only use for (long_text && forbidAutoHiddenWhenSwipeDown = YES) --(void)hide; - -+(instancetype)current;//can be nil - -@end - -@interface EBBannerViewMaker : NSObject - -@property(nonatomic, assign)EBBannerViewStyle style;//default is UIDevice.currentDevice.systemVersion.intValue -@property(nonatomic, strong)UIImage *icon;//default is app icon -@property(nonatomic, strong)NSString *title;//default is app name -@property(nonatomic, strong)NSString *date;//default is "now" = "现在" -@property(nonatomic, strong)NSString *content; -@property(nonatomic, assign)NSTimeInterval showAnimationDuration;//default is 0.3 -@property(nonatomic, assign)NSTimeInterval hideAnimationDuration;//default is 0.5 -@property(nonatomic, assign)NSTimeInterval stayDuration;//default is 4.0 -@property(nonatomic, assign)NSTimeInterval swipeDownStayDuration;//default is 4.0 -@property(nonatomic, strong)id object;//default is content -@property(nonatomic, assign)UInt32 soundID;//default is 1312 -@property(nonatomic, strong)NSString *soundName; -@property(nonatomic, assign)BOOL vibrateOnMute;//default is YES -@property(nonatomic, assign)BOOL showDetailOrHideWhenClickLongText;//default is YES showDetail - -+(instancetype)defaultMaker; - -@end - -//add observer for this notification to handle tap event and get the 'object' above -extern NSString *const EBBannerViewDidClickNotification;//监听点击弹窗的事件 - - diff --git a/demo/Pods/EBBannerView/EBBannerView/EBBannerViewController.h b/demo/Pods/EBBannerView/EBBannerView/EBBannerViewController.h deleted file mode 100644 index 6a6ea53..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/EBBannerViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// EBBannerViewController.h -// demo -// -// Created by pikacode@qq.com on 2017/10/23. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import - -@interface EBBannerViewController : UIViewController - -+(void)setSupportedInterfaceOrientations:(UIInterfaceOrientationMask)orientations; -+(void)setStatusBarHidden:(BOOL)hidden; - -@end diff --git a/demo/Pods/EBBannerView/EBBannerView/EBCustomBannerView.h b/demo/Pods/EBBannerView/EBBannerView/EBCustomBannerView.h deleted file mode 100644 index 144f432..0000000 --- a/demo/Pods/EBBannerView/EBBannerView/EBCustomBannerView.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// EBCustomBannerView.h -// demo -// -// Created by pikacode@qq.com on 2017/10/20. -// Copyright © 2017年 pikacode@qq.com. All rights reserved. -// - -#import - -typedef enum : NSUInteger { - EBCustomViewAppearModeTop,//default - EBCustomViewAppearModeLeft, - EBCustomViewAppearModeRight, - EBCustomViewAppearModeBottom, - EBCustomViewAppearModeCenter -} EBCustomBannerViewAppearMode; - -@class EBCustomBannerViewMaker; -@interface EBCustomBannerView : NSObject - -//make a custom view and show immediately, -+(instancetype)showCustomView:(UIView*)view block:(void(^)(EBCustomBannerViewMaker *make))block; - -//make a custom view and show later -+(instancetype)customView:(UIView*)view block:(void(^)(EBCustomBannerViewMaker *make))block; - --(void)show; --(void)hide; - -@end - -@interface EBCustomBannerViewMaker : NSObject - -@property(nonatomic, assign)CGRect portraitFrame;//default is view.frame -@property(nonatomic, assign)CGRect landscapeFrame;//default is portraitFrame -@property(nonatomic, assign)UInt32 soundID;//default is 0 -@property(nonatomic, strong)NSString *soundName; -@property(nonatomic, assign)NSTimeInterval animationDuration;//default is 0.3 -@property(nonatomic, assign)NSTimeInterval stayDuration;//default is 4.0, set 0 will not hide -@property(nonatomic, assign)EBCustomBannerViewAppearMode portraitMode;//default is top -@property(nonatomic, assign)EBCustomBannerViewAppearMode landscapeMode;//default is top - -@property(nonatomic, strong)NSArray*centerModeDurations;//default is @[@0.3, @0.2, @0.1]; - -@property(nonatomic, assign)BOOL vibrateOnMute;//default is YES - -@end diff --git a/demo/Pods/EBBannerView/LICENSE b/demo/Pods/EBBannerView/LICENSE deleted file mode 100644 index c4b0ada..0000000 --- a/demo/Pods/EBBannerView/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 pikacode - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/demo/Pods/EBBannerView/README.md b/demo/Pods/EBBannerView/README.md deleted file mode 100644 index 1a06e67..0000000 --- a/demo/Pods/EBBannerView/README.md +++ /dev/null @@ -1,219 +0,0 @@ -查看中文文档 [Chinese README.md](/README_CHS.md) - -Email:pikacode@qq.com - -QQ群: 345192153 - - - -# EBBannerView - -Only one line to show: - -- a banner the same style as iOS Push Notifications (auto show iOS 9/10/11 styles up to system version) -- auto play a sound or vibrate when the banner is showing - - -- support swipe down gesture for a long text - -And more: - -- custom banner's icon/title/date/content/animation_time_interval -- custom the sound (use system sound or play a sound file) - - -- autosize portrait/landscape frame -- show a custom view with different frame in portrait/landscape -- custom view has different animation mode, appear from top/left/right/left/center - - -- NSNotification with click event and pass a value - - - - -## Screenshot - -### System style: - - ![](screenshot/3.gif) - - - -### Custom style: - - ![](screenshot/4.gif) - - - -## Installation - -### pod - - target 'YourTargetName' do - pod 'EBBannerView' - end - - - - -## Usage - - -### System style - ---- - -```objc -#import -``` - -2 ways to use: - - - -#### 1.Show a iOS style banner with one line - -up to system version,will show iOS 9/10/11 style,auto show app icon/name. - -```objc -[EBBannerView showWithContent:@"custom content"]; -``` - - - - -#### 2.Customize all values include iOS style - -```objc -//1.create a banner, custom all values -EBBannerView *banner = [EBBannerView bannerWithBlock:^(EBBannerViewMaker *make) { - make.style = EBBannerViewStyleiOS9;//custom system, default is current - //make.style = 9; - make.content = @"MINE eye hath played the painter and hath stelled"; - //make.object = ... - //make.icon = ... - //make.title = ... - //make.soundID = ... -}]; - -//2.show -[banner show]; -``` - - - -##### Parameters: - -(if not set will use default values) - -- `style`:the iOS style, default is `UIDevice.currentDevice.systemVersion.intValue`, type enum : NSInteger {9/10/11} -- `icon`:the icon, default is app icon, type UIImage -- `title`:the title, default is app name, type NSString -- `date`:the date, default is localized string @"现在" = @"now", type NSString -- `content`:the content, type NSString -- `animationDuration`:the animation time(show/hide the banner), type NSTimeInterval -- `stayDuration`:how long the banner will stay before hide, type NSTimeInterval -- `object`:you can set it when create, then get it when clicked by adding an observer (see below), default is `content`,type id -- `soundID`:the sound will play when the banner is showing (when the mute is turn on iPhone will vibrate), type UInt32 - - - it's iOS system sound id, default push notification sound "Tritone" is 1312 - - More sound id to see here [iOS Predefined sounds](http://iphonedevwiki.net/index.php/AudioServices#) or here [AudioServices sounds](http://www.cocoachina.com/bbs/read.php?tid=134344) - - - You can download all the system sounds [UISounds.zip](/UISounds.zip) , listen and choose one which you perfer, then check out it's `id` with the form above -- `soundName`:play a cusome sound file, type NSString - - drag the file to Xcode proj - - pass the file name and extension,e.g. `banner.soundName = @"sound.mp3"` - - - - -### Custom style - ---- - -```objc -#import -``` - -2 ways to use: - - - -#### 1.create and show immediately - -```objc -UIView *view = ...;//the view want to show - -[EBCustomBannerView showCustomView:view block:^(EBCustomBannerViewMaker *make) { - make.portraitFrame = ...;//frame in portrait - make.portraitMode = EBCustomViewAppearModeTop;//appear from top in portrait - make.soundID = 1312; - make.stayDuration = 3.0; - //...... -}]; -``` - - - -#### 2.create and show after - -```objc -UIView *view = ...;//the view want to show - -//1. -EBCustomBannerView *customView = [EBCustomBannerView customView:view block:^(EBCustomBannerViewMaker *make) { - make.portraitFrame = ...; - make.portraitMode = EBCustomViewAppearModeTop; - make.soundID = 1312; - make.stayDuration = 3.0; - //...... -}]; - -//2. -[customView show]; -//[customView hide]; -``` - - - -##### Parameters: - -- `portraitFrame`: frame in portrait,default is view.frame,type CGRect -- `landscapeFrame`: frame in landscape,default is view.frame,type CGRect -- `soundID`: (the same as `system style`'s) -- `soundName`: (the same as `system style`'s) -- `animationDuration`: (the same as `system style`'s) -- `stayDuration`: (the same as `system style`'s) -- `portraitMode`: in portrait view appears from top/bottom/left/right/center, default is top, type enum -- `landscapeMode`: in landscape view appears from top/bottom/left/right/center, default is top, type enum -- `centerModeDurations`: the animation time of view appears from center, default is @[@0.3, @0.2, @0.1], `animationDuration` is invalid for center animation - - - - - -## Handle click event and pass value (system style) - -- add an observer for `EBBannerViewDidClickNotification` and handle click event -- pass an object when init the banner, and get it when clicked - -```objc -#import -{ - ... - EBBannerView *banner = [EBBannerView bannerWithBlock:^(EBBannerViewMaker *make) { - ... - make.object = aObject; - }]; -} - -{ - ... - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bannerViewDidClick:) name:EBBannerViewDidClickNotification object:nil]; -} - --(void)bannerViewDidClick:(NSNotification*)noti{ - NSLog(@"%@",noti.object); -} -``` diff --git a/demo/demo.xcworkspace/xcuserdata/pikacode.xcuserdatad/UserInterfaceState.xcuserstate b/demo/demo.xcworkspace/xcuserdata/pikacode.xcuserdatad/UserInterfaceState.xcuserstate index dd3145ce75782b719b2f515698ea635a0b7c6f74..81332e2a580acfd9f34236061ad694d645815b90 100644 GIT binary patch literal 88766 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%0Atv2T)pdP1kip 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 IH8t(~7yei5Z2$lO literal 88665 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 L&;P&o3$=d%#N)06 diff --git a/demo/demo/.DS_Store b/demo/demo/.DS_Store index e503905550456d78acbb47c5a6b914580fa9b38b..c9c2efa06ea49b55510dd39ee3f516fc4c173a34 100644 GIT binary patch delta 72 zcmZp1XmQwZS7@@au>0gJ5q>77#L1?@A(M9s3r?OTEI+vuNS_i`VQiiJUf6PSorn`i a5gUUw0|Ud1$@L-ulivypZhj!5!VLgv#TP>W delta 86 zcmZp1XmQwZSBQ;aB?AK^$7D-k$H`eD{FBd%uugs?