用POP动画编写带富文本的自定义动画效果

用POP动画编写带富文本的自定义动画效果

【源码】

https://github.com/YouXianMing/UI-Component-Collection

 

【效果】

 

【特点】

* 支持富文本

* 可定制型强(继承父类重写父类的startAnimation方法即可)

* 支持动画的中断与持续

* 支持CAMediaTimingFunction

* 数据与UI隔离,便于你封装属于你的类

 

【核心】

//
//  POPNumberCount.h
//  POP
//
//  Created by XianMingYou on 15/4/10.
//  Copyright (c) 2015年 XianMingYou. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "POP.h"

@class POPNumberCount;

@protocol POPNumberCountDelegate <NSObject>
@optional
/**
 *  最原始的方法
 *
 *  @param numberCount 对象自己
 *  @param number      变化的值
 */
- (void)numberCount:(POPNumberCount *)numberCount currentNumber:(NSNumber *)number;

/**
 *  子类可以实现的方法
 *
 *  @param numberCount 对象自己
 *  @param string      子类返回的富文本
 */
- (void)numberCount:(POPNumberCount *)numberCount currentAttributedString:(NSAttributedString *)string;

/**
 *  子类可以实现的方法
 *
 *  @param numberCount 对象自己
 *  @param string      子类返回的文本
 */
- (void)numberCount:(POPNumberCount *)numberCount currentString:(NSString *)string;

@end

@interface POPNumberCount : NSObject

@property (nonatomic, weak)   id<POPNumberCountDelegate> delegate;       // 代理

@property (nonatomic, assign) CGFloat                    fromValue;      // 开始值
@property (nonatomic, assign) CGFloat                    toValue;        // 结束值
@property (nonatomic, assign) CGFloat                    currentValue;   // 当前值
@property (nonatomic, assign) NSTimeInterval             duration;       // 持续时间

@property (nonatomic, strong) CAMediaTimingFunction     *timingFunction; // 时间函数
@property (nonatomic, strong) POPBasicAnimation         *conutAnimation;

/*
 *  存储值(执行动画之前,请先将设置的值进行存储)
 */
- (void)saveValues;

/*
 *  开始动画(继承的子类需要重写本方法来,然后与代理一起配合使用)
 */
- (void)startAnimation;

/*
 *  停止动画
 */
- (void)stopAnimation;

@end
//
//  POPNumberCount.m
//  POP
//
//  Created by XianMingYou on 15/4/10.
//  Copyright (c) 2015年 XianMingYou. All rights reserved.
//

#import "POPNumberCount.h"
#import "ConfigAttributedString.h"

@implementation POPNumberCount

- (instancetype)init {
    self = [super init];
    if (self) {
        self.conutAnimation = [POPBasicAnimation animation];
    }
    return self;
}

- (void)saveValues {
    self.conutAnimation.fromValue = @(self.fromValue);
    self.conutAnimation.toValue   = @(self.toValue);
    self.conutAnimation.duration  = (self.duration <= 0 ? 0.4f : self.duration);
    if (self.timingFunction) {
        self.conutAnimation.timingFunction = self.timingFunction;
    }
}

- (void)startAnimation {
    // 只有执行了代理才会执行计数引擎
    if (self.delegate && [self.delegate respondsToSelector:@selector(numberCount:currentNumber:)]) {
        /* 将计算出来的值通过writeBlock动态给控件设定 */
        self.conutAnimation.property = \
        [POPMutableAnimatableProperty propertyWithName:@"conutAnimation"
                                           initializer:^(POPMutableAnimatableProperty *prop) {
                                               prop.writeBlock      = ^(id obj, const CGFloat values[]) {
                                                   NSNumber *number = @(values[0]);
                                                   _currentValue    = values[0];

                                                   /* ------------- 子类重写父类的这个方法 ------------- */
                                                   [_delegate numberCount:self currentNumber:number];
                                                   /* ---------------------------------------------- */
                                               };
                                           }];

        // 添加动画
        [self pop_addAnimation:self.conutAnimation forKey:nil];
    }
}

- (void)stopAnimation {
    [self pop_removeAllAnimations];
}

@end

【说明】

父类  POPNumberCount 的设计类似于设计模式中的策略模式,提供接口让子类重写来实现不一样的功能,父类基本不会修改,具体到某个子类,只需要修改子类中的特定实现即可。(父类中的协议类似于一个个策略,具体由子类来实现)

时间: 2024-08-28 21:55:24

用POP动画编写带富文本的自定义动画效果的相关文章

教程-谁用过百度富文本?或者其他功能简单的富文本推荐

问题描述 谁用过百度富文本?或者其他功能简单的富文本推荐 RT:问题描述:百度富文本怎么自定义功能,把不需要的功能统统屏蔽掉或去掉啊 或者推荐一些简单且实用的富文本也行. 最好是带教程那张的!!! 解决方案 看官方的手册,有没有提供相关的接口么 解决方案二: 就是通过js和配置文件控制的,包括所有的工具栏按钮,你把不要的删除就好了. 解决方案三: Fckeditor这个比较好用 解决方案四: editor = new UE.ui.Editor({initialFrameHeight:200ini

编写带有点击特效的UIButton

编写带有点击特效的UIButton 效果: 源码: // // ViewController.m // Button // // Created by XianMingYou on 15/1/18. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic, strong)

WPS演示的自定义动画制作万花筒的方法

  WPS演示的自定义动画制作万花筒的方法 1.运行WPS演示,新建一个演示文稿后,将其背景设为黑色. 2.单击"绘图工具栏"里的文本框,插入一个文本框,输入任意一段文字,例如"我爱WPSOffice!*^-^*"后,先将文字颜色设为白色,再调整字体.字号和文本框的位置. 3.选中文本框后,单击鼠标右键,在快捷菜单中单击"自定义动画"命令,在右侧的"自定义动画"窗格中,依次单击"添加效果-强调-陀螺旋".

富文本带点击事件的解决方案

富文本带点击事件的解决方案   效果   分析 富文本中要添加点击link事件,需要深入到CoreText里面才能够解决,本人将TTTAttributedLabel进行了封装(封装并不完全,以后会继续完善),简化了操作.   源码 https://github.com/YouXianMing/UI-Component-Collection https://github.com/TTTAttributedLabel/TTTAttributedLabel // // TTTAttributeLabe

在用JavaScript编写富文本,问一些细节问题。求思路。

问题描述 在用JavaScript编写富文本,问一些细节问题.求思路. 现在的富文本编辑器是怎么做到所见即所得的.我看了几个案例(比如CSDN这个文本编辑)都是直接写入到一个DIV中.那怎么以表单的方式提交呢? 我在前面的一个问题里解决了获取选中内容的问题.当换行时我希望在当前结点后追加一个P标签,但新输入的内容怎么能让它进入到新的p标签里? Like this: <div id="t" contenteditable="true"> <p>

解析错误富文本json字符串(带双引号)的快速解决方法_C#教程

公司的项目,通过json传回来的是这么个东西: NewsId":"94f52614-8764-46d7-a5fe-d0da1fe878ed","NewsTitle":"大型公选课<可持续发展与未来>系列二之现代经济(绿色经济)开始网上选课报名","NewsContent":"<span style="font-size:12pt;font-family:宋体;color:blac

Selenium2+python自动化24-js处理富文本(带iframe)

前言     上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的问题 一.加载配置     1.打开博客园写随笔,首先需要登录,这里为了避免透露个人账户信息,我直接加载配置文件,免登录了.       不懂如何加载配置文件的,看这篇Selenium2+python自动化18-加载Firefox配置 二.打开编辑界面     1.博客首页地址:bolgur

常用的HTML富文本编译器UEditor、CKEditor、TinyMCE、HTMLArea、eWebEditor、KindEditor简介

1.UEditor UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于BSD协议,允许自由使用和修改代码... 主要特点: 轻量级:代码精简,加载迅速. 定制化:全新的分层理念,满足多元化的需求.采用三层架构:1. 核心层: 为命令层提供底层API,如range/selection/domUtils类.2. 命令插件层: 基于核心层开发command命令,命令之间相互独立.3. 界面层: 为命令层提供用户使用界面.满足不同层次用

扩展于RCLabel的支持异步加载网络图片的富文本引擎的设计

扩展于RCLabel的支持异步加载网络图片的富文本引擎的设计         在iOS开发中,图文混排一直都是UI编程的一个核心点,也有许多优秀的第三方引擎,其中很有名的一套图文混排的框架叫做DTCoreText.但是在前些日的做的一个项目中,我并没有采用这套框架,原因有二,一是这套框架体积非常大,而项目的需求其实并不太高:二是要在这套框架中修改一些东西,难度也非常大,我最终采用的是一个叫做RCLabel的第三方控件,经过一些简单的优化和完善,达到了项目的要求.         先来介绍一下我项