zoukankan      html  css  js  c++  java
  • [控件] 心形加载的view

    心形加载的view

    效果:

    素材图片:

    源码:

    StarView.h 与 StarView.m

    //
    //  StarView.h
    //  Star
    //
    //  Created by XianMingYou on 15/3/13.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface StarView : UIView
    
    
    @property (nonatomic, strong) UIColor        *backgroundViewColor;
    @property (nonatomic, strong) UIColor        *animationViewColor;
    @property (nonatomic, assign) NSTimeInterval  animationDuration;
    
    + (instancetype)createWithFrame:(CGRect)frame
                backgroundViewColor:(UIColor *)bgColor
                 animationViewColor:(UIColor *)anColor;
    
    - (void)percent:(CGFloat)percent animated:(BOOL)animated;
    
    @end
    //
    //  StarView.m
    //  Star
    //
    //  Created by XianMingYou on 15/3/13.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import "StarView.h"
    #import "UIView+SetRect.h"
    
    @interface StarView ()
    
    @property (nonatomic, strong) UIImageView  *imageView;      // 图片
    @property (nonatomic, strong) UIView       *backgroundView; // 背景色View
    @property (nonatomic, strong) UIView       *animationView;  // 做动画的View
    
    @property (nonatomic) CGFloat height;
    @property (nonatomic) CGFloat width;
    
    @end
    
    @implementation StarView
    
    - (instancetype)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            self.layer.masksToBounds = YES;
            self.height              = frame.size.height;
            self.width               = frame.size.width;
            
            [self addSubview:self.backgroundView];
            
            [self addSubview:self.animationView];
            
            [self initImageView];
        }
        return self;
    }
    
    - (void)initImageView {
        self.imageView       = [[UIImageView alloc] initWithFrame:self.bounds];
        self.imageView.image = [UIImage imageNamed:@"star"];
        
        [self addSubview:self.imageView];
    }
    
    - (void)percent:(CGFloat)percent animated:(BOOL)animated {
        // 过滤percent
        if (percent <= 0) {
            percent = 0;
        } else if (percent >= 1) {
            percent = 1;
        }
    
        if (animated == NO) {
            CGFloat positionY = self.height * (1 - percent);
            _animationView.y  = positionY;
        } else {
            CGFloat positionY = self.height * (1 - percent);
            [UIView animateWithDuration:(self.animationDuration <= 0 ? 0.5 : self.animationDuration)
                             animations:^{
                _animationView.y = positionY;
            }];
        }
    }
    
    + (instancetype)createWithFrame:(CGRect)frame
                backgroundViewColor:(UIColor *)bgColor
                 animationViewColor:(UIColor *)anColor {
        StarView *star           = [[StarView alloc] initWithFrame:frame];
        star.backgroundViewColor = bgColor;
        star.animationViewColor  = anColor;
    
        return star;
    }
    
    @synthesize backgroundView = _backgroundView;
    - (UIView *)backgroundView {
        if (_backgroundView == nil) {
            _backgroundView = [[UIView alloc] initWithFrame:self.bounds];
        }
        
        return _backgroundView;
    }
    
    @synthesize animationView = _animationView;
    - (UIView *)animationView {
        if (_animationView == nil) {
            _animationView = [[UIView alloc] initWithFrame:CGRectMake(0, self.height, self.width, self.height)];
        }
        
        return _animationView;
    }
    
    @synthesize backgroundViewColor = _backgroundViewColor;
    - (UIColor *)backgroundViewColor {
        return _backgroundViewColor;
    }
    - (void)setBackgroundViewColor:(UIColor *)backgroundViewColor {
        _backgroundViewColor            = backgroundViewColor;
        _backgroundView.backgroundColor = backgroundViewColor;
    }
    
    @synthesize animationViewColor = _animationViewColor;
    - (UIColor *)animationViewColor {
        return _animationViewColor;
    }
    - (void)setAnimationViewColor:(UIColor *)animationViewColor {
        _animationViewColor            = animationViewColor;
        _animationView.backgroundColor = animationViewColor;
    }
    @end

    辅助文件 UIView+SetRect.h 与 UIView+SetRect.m

    //
    //  UIView+SetRect.h
    //  TestPch
    //
    //  Created by YouXianMing on 14-12-26.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface UIView (SetRect)
    
    // Frame
    @property (nonatomic) CGPoint viewOrigin;
    @property (nonatomic) CGSize  viewSize;
    
    // Frame Origin
    @property (nonatomic) CGFloat x;
    @property (nonatomic) CGFloat y;
    
    // Frame Size
    @property (nonatomic) CGFloat width;
    @property (nonatomic) CGFloat height;
    
    // Frame Borders
    @property (nonatomic) CGFloat top;
    @property (nonatomic) CGFloat left;
    @property (nonatomic) CGFloat bottom;
    @property (nonatomic) CGFloat right;
    
    // Center Point
    #if !IS_IOS_DEVICE
    @property (nonatomic) CGPoint center;
    #endif
    @property (nonatomic) CGFloat centerX;
    @property (nonatomic) CGFloat centerY;
    
    // Middle Point
    @property (nonatomic, readonly) CGPoint middlePoint;
    @property (nonatomic, readonly) CGFloat middleX;
    @property (nonatomic, readonly) CGFloat middleY;
    @property (nonatomic, assign) CGFloat cornerRadius ;
    @property (nonatomic ,assign) BOOL round ;
    @end
    //
    //  UIView+SetRect.m
    //  TestPch
    //
    //  Created by YouXianMing on 14-12-26.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "UIView+SetRect.h"
    
    @implementation UIView (SetRect)
    
    #pragma mark Frame
    
    - (CGPoint)viewOrigin
    {
        return self.frame.origin;
    }
    
    - (void)setViewOrigin:(CGPoint)newOrigin
    {
        CGRect newFrame = self.frame;
        newFrame.origin = newOrigin;
        self.frame = newFrame;
    }
    
    - (CGSize)viewSize
    {
        return self.frame.size;
    }
    
    - (void)setViewSize:(CGSize)newSize
    {
        CGRect newFrame = self.frame;
        newFrame.size = newSize;
        self.frame = newFrame;
    }
    
    
    #pragma mark Frame Origin
    
    - (CGFloat)x
    {
        return self.frame.origin.x;
    }
    
    - (void)setX:(CGFloat)newX
    {
        CGRect newFrame = self.frame;
        newFrame.origin.x = newX;
        self.frame = newFrame;
    }
    
    - (CGFloat)y
    {
        return self.frame.origin.y;
    }
    
    - (void)setY:(CGFloat)newY
    {
        CGRect newFrame = self.frame;
        newFrame.origin.y = newY;
        self.frame = newFrame;
    }
    
    
    #pragma mark Frame Size
    
    - (CGFloat)height
    {
        return self.frame.size.height;
    }
    
    - (void)setHeight:(CGFloat)newHeight
    {
        CGRect newFrame = self.frame;
        newFrame.size.height = newHeight;
        self.frame = newFrame;
    }
    
    - (CGFloat)width
    {
        return self.frame.size.width;
    }
    
    - (void)setWidth:(CGFloat)newWidth
    {
        CGRect newFrame = self.frame;
        newFrame.size.width = newWidth;
        self.frame = newFrame;
    }
    
    
    #pragma mark Frame Borders
    
    - (CGFloat)left
    {
        return self.x;
    }
    
    - (void)setLeft:(CGFloat)left
    {
        self.x = left;
    }
    
    - (CGFloat)right
    {
        return self.frame.origin.x + self.frame.size.width;
    }
    
    - (void)setRight:(CGFloat)right
    {
        self.x = right - self.width;
    }
    
    - (CGFloat)top
    {
        return self.y;
    }
    
    - (void)setTop:(CGFloat)top
    {
        self.y = top;
    }
    
    - (CGFloat)bottom
    {
        return self.frame.origin.y + self.frame.size.height;
    }
    
    - (void)setBottom:(CGFloat)bottom
    {
        self.y = bottom - self.height;
    }
    
    
    #pragma mark Center Point
    
    #if !IS_IOS_DEVICE
    - (CGPoint)center
    {
        return CGPointMake(self.left + self.middleX, self.top + self.middleY);
    }
    
    - (void)setCenter:(CGPoint)newCenter
    {
        self.left = newCenter.x - self.middleX;
        self.top = newCenter.y - self.middleY;
    }
    #endif
    
    - (CGFloat)centerX
    {
        return self.center.x;
    }
    
    - (void)setCenterX:(CGFloat)newCenterX
    {
        self.center = CGPointMake(newCenterX, self.center.y);
    }
    
    - (CGFloat)centerY
    {
        return self.center.y;
    }
    
    - (void)setCenterY:(CGFloat)newCenterY
    {
        self.center = CGPointMake(self.center.x, newCenterY);
    }
    
    
    #pragma mark Middle Point
    
    - (CGPoint)middlePoint
    {
        return CGPointMake(self.middleX, self.middleY);
    }
    
    - (CGFloat)middleX
    {
        return self.width / 2;
    }
    
    - (CGFloat)middleY
    {
        return self.height / 2;
    }
    
    - (void)setCornerRadius:(CGFloat)cornerRadius
    {
        self.layer.masksToBounds = YES ;
        self.layer.cornerRadius = cornerRadius ;
    }
    
    - (void)setRound:(BOOL)round
    {
        [self setCornerRadius:self.height/2];
    }
    
    - (CGFloat)cornerRadius
    {
        return  self.layer.cornerRadius ;
    }
    
    - (BOOL)round
    {
        return NO ;
    }
    
    @end

    使用时候的源码:

    //
    //  ViewController.m
    //  Star
    //
    //  Created by XianMingYou on 15/3/13.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "StarView.h"
    
    @interface ViewController ()
    
    @property (nonatomic, strong) StarView  *star;
    @property (nonatomic, strong) NSTimer   *timer;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.star = [StarView createWithFrame:CGRectMake(0, 0, 100, 100)
                          backgroundViewColor:[[UIColor redColor] colorWithAlphaComponent:0.05f]
                           animationViewColor:[[UIColor redColor] colorWithAlphaComponent:0.5f]];
        self.star.animationDuration   = 1.f;
        self.star.center              = self.view.center;
        [self.view addSubview:self.star];
        
        
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5f
                                                      target:self
                                                    selector:@selector(timerEvent:)
                                                    userInfo:nil
                                                     repeats:YES];
    }
    
    - (void)timerEvent:(id)sender {
        CGFloat percent = arc4random() % 100 / 100.f;
        [self.star percent:percent animated:YES];
    }
    
    @end
  • 相关阅读:
    【网易官方】极客战记(codecombat)攻略-森林-村庄守卫village-warder
    【网易官方】极客战记(codecombat)攻略-森林-乡村漫游者village-rover
    【网易官方】极客战记(codecombat)攻略-森林-Agrippa 守卫战 B-the-agrippa-defense-b
    【网易官方】极客战记(codecombat)攻略-森林-Agrippa 守卫战A-the-agrippa-defense-a
    【网易官方】极客战记(codecombat)攻略-森林-Agrippa守卫战the-agrippa-defense
    【网易官方】极客战记(codecombat)攻略-森林-以静制动stillness-in-motion
    【网易官方】极客战记(codecombat)攻略-森林-跃火林中forest-fire-dancing
    Can not deserialize instance of xxx out of START_ARRAY token
    Springboot/cloud 项目突然出现许多Failed to read artifact descriptor, 或者无法解析
    redis-deskmanager 连不上 虚拟机
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4335983.html
Copyright © 2011-2022 走看看