美文网首页
自定义弹窗

自定义弹窗

作者: Fisher123 | 来源:发表于2018-04-21 16:17 被阅读0次

弹窗类为KDLQuicklyBetPopView

KDLQuicklyBetPopView.h 代码:

//
//  KDLQuicklyBetPopView.h
//  KingDynastyLottery
//
//  Created by liyu on 2018/4/20.
//  Copyright © 2018年 sensefun. All rights reserved.
//

#import <UIKit/UIKit.h>

@protocol quicklyBetPopViewDelegate<NSObject>

- (void)quicklyBetPopViewConfirmButtonClicked:(UIButton *)button;

@end

@interface KDLQuicklyBetPopView : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *lotteryPeriodLabel;
@property (weak, nonatomic) IBOutlet UILabel *lotteryTypeLabel;
@property (weak, nonatomic) IBOutlet UILabel *lotteryAmountLabel;
@property (weak, nonatomic) IBOutlet UILabel *totalAmountLabel;
@property (weak, nonatomic) IBOutlet UIButton *confirmButton;
@property (nonatomic, weak) id <quicklyBetPopViewDelegate> delegate;

+ (instancetype)QuicklyBetPopViewWithOwner:(id)owner;

// 弹出弹窗
- (void)showQuicklyBetPopView;

// 收起弹窗
- (void)hideQuicklyBetPopView;

@end

KDLQuicklyBetPopView.m 代码:

//
//  KDLQuicklyBetPopView.m
//  KingDynastyLottery
//
//  Created by liyu on 2018/4/20.
//  Copyright © 2018年 sensefun. All rights reserved.
//

#import "KDLQuicklyBetPopView.h"
#import "CABasicAnimation+popAnimation.h"

@interface KDLQuicklyBetPopView()<CAAnimationDelegate>
// 背景按钮
@property (nonatomic, strong) UIButton *backgroundBgButton;

@end

@implementation KDLQuicklyBetPopView

+ (instancetype)QuicklyBetPopViewWithOwner:(id)owner {
  UINib *nib = [UINib nibWithNibName:NSStringFromClass([KDLQuicklyBetPopView class]) bundle:nil];
  KDLQuicklyBetPopView *popView = [nib instantiateWithOwner:owner options:nil].firstObject;
  popView.backgroundColor = [UIColor whiteColor];
  return popView;
}

- (void)awakeFromNib {
  [super awakeFromNib];
  self.layer.cornerRadius = 4;
  self.layer.masksToBounds = YES;
  self.confirmButton.backgroundColor = RGBA(211, 53, 45, 1.0);
  self.confirmButton.layer.cornerRadius = 4;
  self.confirmButton.layer.masksToBounds = YES;
}

// 弹出弹窗
- (void)showQuicklyBetPopView {
  self.backgroundBgButton = [[UIButton alloc] init];
  self.backgroundBgButton.backgroundColor = [UIColor blackColor];
  self.backgroundBgButton.alpha = 0.5;
  [self.backgroundBgButton addTarget:self action:@selector(backgroundButtonAction:) forControlEvents:UIControlEventTouchUpInside];
  UIWindow *window = [UIApplication sharedApplication].keyWindow;
  self.center = window.center;
  self.backgroundBgButton.frame = window.bounds;
  [window addSubview:self.backgroundBgButton];
  [window addSubview:self];
  CABasicAnimation *popAnimation = [CABasicAnimation showPopView];
  [self.layer addAnimation:popAnimation forKey:@"show"];
}

// 收起弹窗
- (void)hideQuicklyBetPopView {
  CABasicAnimation *popAnimation = [CABasicAnimation hidePopView];
  popAnimation.delegate = self;
  [self.layer addAnimation:popAnimation forKey:@"hide"];
}

#pragma  mark - CAAnimationDelegate
- (void)animationDidStop:(CAAnimationGroup *)anim finished:(BOOL)flag {
  if (flag) {
      [self.backgroundBgButton removeFromSuperview];
      [self removeFromSuperview];
      [self.layer removeAllAnimations];
  }   
}

- (IBAction)buttonClicked:(UIButton *)sender {
  // 确定按钮
  if (sender == self.confirmButton) {
      if (self.delegate && [self.delegate respondsToSelector:@selector(quicklyBetPopViewConfirmButtonClicked:)]) {
          [self.delegate quicklyBetPopViewConfirmButtonClicked:self.confirmButton];
      }
  }
}

// 背景按钮
- (void)backgroundButtonAction:(UIButton *)sender {
  if (self.delegate && [self.delegate respondsToSelector:@selector(quicklyBetPopViewConfirmButtonClicked:)]) {
      [self.delegate quicklyBetPopViewConfirmButtonClicked:self.confirmButton];
  }
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
}

@end

其中CABasicAnimation+popAnimation为动画类

CABasicAnimation+popAnimation.h 代码:

//
//  CABasicAnimation+popAnimation.h
//  KingDynastyLottery
//
//  Created by liyu on 2018/4/20.
//  Copyright © 2018年 sensefun. All rights reserved.
//

#import <QuartzCore/QuartzCore.h>

@interface CABasicAnimation (popAnimation)

+ (instancetype)showPopView;

+ (instancetype)hidePopView;

@end


CABasicAnimation+popAnimation.m 代码:

//
//  CABasicAnimation+popAnimation.m
//  KingDynastyLottery
//
//  Created by liyu on 2018/4/20.
//  Copyright © 2018年 sensefun. All rights reserved.
//

#import "CABasicAnimation+popAnimation.h"

@implementation CABasicAnimation (popAnimation)

+ (instancetype)showPopView {
    CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    opacityAnim.fromValue = [NSNumber numberWithFloat:0.1];
    opacityAnim.toValue = [NSNumber numberWithFloat:1.0];
    opacityAnim.removedOnCompletion = YES;
    opacityAnim.duration = 0.35;
    
    CAKeyframeAnimation *showAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
    showAnimation.values = @[@(0.1), @(1.2), @(1.0)];
    showAnimation.duration = 0.35;
    showAnimation.removedOnCompletion = YES;
    showAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[opacityAnim, showAnimation];
    group.duration = 0.35;
    group.removedOnCompletion = YES;
    
    return (CABasicAnimation *)group;
}


+ (instancetype)hidePopView {
    CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
    opacityAnim.toValue = [NSNumber numberWithFloat:0.1];
    opacityAnim.removedOnCompletion = YES;
    opacityAnim.duration = 0.35;
    
    CAKeyframeAnimation *hideAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
    hideAnimation.values = @[@(1.0), @(1.2), @(0.1)];
    hideAnimation.duration = 0.35;
    hideAnimation.removedOnCompletion = YES;
    hideAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = @[opacityAnim, hideAnimation];
    group.duration = 0.35;
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    
    return (CABasicAnimation *)group;
}

@end


调用方法:

- (void)buttonClicked {
 self.quicklyBetPopView = [KDLQuicklyBetPopView QuicklyBetPopViewWithOwner:self];
    self.quicklyBetPopView.frame = CGRectMake(0, 0, 300, 288);
    self.quicklyBetPopView.delegate = self;
    [self.quicklyBetPopView showQuicklyBetPopView];
}

KDLQuicklyBetPopView代理方法:

#pragma mark - quicklyBetPopViewDelegate
// 快速投注弹窗
- (void)quicklyBetPopViewConfirmButtonClicked:(UIButton *)button {
    // 确定按钮
    if (button == self.quicklyBetPopView.confirmButton) {
        [self.quicklyBetPopView hideQuicklyBetPopView];
    }
}

效果图:

Image

相关文章

网友评论

      本文标题:自定义弹窗

      本文链接:https://www.haomeiwen.com/subject/coixlftx.html