弹窗类为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];
}
}
效果图:
![](https://img.haomeiwen.com/i2822511/61ccdeb1df0cde9a.jpg)
网友评论