English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'image suivante montre l'effet visuel :
swift: https://github.com/corin8823/Popover OC: https://github.com/Assuner-Lee/PopoverObjC
Exemple d'utilisation
pod 'PopoverObjC' #import "ASViewController.h" #import <PopoverObjC/ASPopover.h> @interface ASViewController () @property (weak, nonatomic) IBOutlet UIButton *btn; @property (nonatomic, strong) ASPopover *btnPopover; @property (nonatomic, strong) ASPopover *itemPopover; @end @implementation ASViewController - (void)viewDidLoad { [super viewDidLoad]; [self.btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"item" style:UIBarButtonItemStylePlain target:self action:@selector(clickItem:)]; } - (void)didReceiveMemoryWarning { }
Initialiser Popover
- (ASPopover *)btnPopover { if (!_btnPopover) { ASPopoverOption *option = [[ASPopoverOption alloc] init]; option.popoverType = ASPopoverTypeUp; option.autoAdjustDirection = NO; option.arrowSize = CGSizeMake(9, 6); option.blackOverlayColor = [UIColor clearColor]; option.popoverColor = [UIColor lightGrayColor]; option.dismissOnBlackOverlayTap = YES; option.animationIn = 0.5; //... _btnPopover = [[ASPopover alloc] initWithOption:option]; } return _btnPopover; } - (ASPopover *)itemPopover { if (!_itemPopover) { ASPopoverOption *option = [[ASPopoverOption alloc] init]; option.autoAdjustDirection = NO; option.arrowSize = CGSizeMake(10, 6); option.blackOverlayColor = [UIColor clearColor]; option.sideEdge = 7; option.dismissOnBlackOverlayTap = YES; option.popoverColor = [[UIColor blackColor] colorWithAlphaComponent:0.7]; option.autoAdjustDirection = YES; option.animationIn = 0.4; option.springDamping = 0.5; option.initialSpringVelocity = 1; option.overlayBlur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; //... _itemPopover = [[ASPopover alloc] initWithOption:option]; } return _itemPopover; }
The properties of the popover can be set in the option.
Pop-up bubble
- (void)clickBtn:(id)sender { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width - 50, 40)]; [self.btnPopover show:view fromView:self.btn]; // in delegate window } - (void)clickItem:(id)sender { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)]; UIView *itemView = [self.navigationItem.rightBarButtonItem valueForKey:@"view"]; // vous devriez utiliser une vue personnalisée dans l'élément; if (itemView) { // [self.itemPopover show:view fromView:itemView]; CGPoint originPoint = [self.itemPopover originArrowPointWithView:view fromView:itemView]; originPoint.y += 5; [self.itemPopover show:view atPoint:originPoint]; } } @end
Peut afficher un contenu view sur un certain point ou une certaine vue
Interface de Popover #import <UIKit/UIKit.h> #import "ASPopoverOption.h" typedef void (^ASPopoverBlock)(void); @interface ASPopover : UIView @property (nonatomic, copy) ASPopoverBlock willShowHandler; @property (nonatomic, copy) ASPopoverBlock willDismissHandler; @property (nonatomic, copy) ASPopoverBlock didShowHandler; @property (nonatomic, copy) ASPopoverBlock didDismissHandler; @property (nonatomic, strong) ASPopoverOption *option; - (instancetype)initWithOption:(ASPopoverOption *)option; - (void)dismiss; - (void)show:(UIView *)contentView fromView:(UIView *)fromView; - (void)show:(UIView *)contentView fromView:(UIView *)fromView inView:(UIView *)inView; - (void)show:(UIView *)contentView atPoint:(CGPoint)point; - (void)show:(UIView *contentView atPoint:(CGPoint)point inView:(UIView *)inView; - (CGPoint)originArrowPointWithView:(UIView *)contentView fromView:(UIView *)fromView; - (CGPoint)arrowPointWithView:(UIView *)contentView fromView:(UIView *)fromView inView:(UIView *)inView popoverType:(ASPopoverType)type; @end
contentView: Le contenu à afficher ; fromView: La vue à partir de laquelle la bulle de dialogue est montrée ; inView: La vue sur laquelle la bulle de dialogue est dessinée, généralement la fenêtre delegate ; atPoint: Le point à partir duquel la bulle de dialogue est montrée ; il est possible de d'abord obtenir originPoint, décalage ;
PopoverOption Interface typedef NS_ENUM(NSInteger, ASPopoverType) { ASPopoverTypeUp = 0, ASPopoverTypeDown, }; @interface ASPopoverOption : NSObject @property (nonatomic, assign) CGSize arrowSize; @property (nonatomic, assign) NSTimeInterval animationIn; // if 0, no animation @property (nonatomic, assign) NSTimeInterval animationOut; @property (nonatomic, assign) CGFloat cornerRadius; @property (nonatomic, assign) CGFloat sideEdge; @property (nonatomic, strong) UIColor *blackOverlayColor; @property (nonatomic, strong) UIBlurEffect *overlayBlur; @property (nonatomic, strong) UIColor *popoverColor; @property (nonatomic, assign) BOOL dismissOnBlackOverlayTap; @property (nonatomic, assign) BOOL showBlackOverlay; @property (nonatomic, assign) CGFloat springDamping; @property (nonatomic, assign) CGFloat initialSpringVelocity; @property (nonatomic, assign) ASPopoverType popoverType; @property (nonatomic, assign) BOOL highlightFromView; @property (nonatomic, assign) CGFloat highlightCornerRadius; @property (nonatomic, assign) BOOL autoAjustDirection; // down preferred, effect just in view not at point @end
Résumé
Ce que j'ai décrit ci-dessus est l'effet de bulle iOS Popover simple, utile et personnalisable que j'ai présenté aux amis. J'espère que cela vous sera utile. Si vous avez des questions, n'hésitez pas à laisser un message, je vous répondrai à temps. Je tiens également à remercier chaleureusement le soutien du tutoriel d'interjeter.
Déclaration : Le contenu de cet article est extrait du réseau, et appartient au propriétaire original. Le contenu est apporté par les utilisateurs d'Internet et téléchargé eux-mêmes. Ce site n'appartient pas à la propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu présumé de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu présumé de violation de droits d'auteur.)