服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS 仿微博客户端红包加载界面 XLDotLoading效果

iOS 仿微博客户端红包加载界面 XLDotLoading效果

2021-03-04 13:32孟宪亮 IOS

这篇文章主要介绍了iOS 仿微博客户端红包加载界面 XLDotLoading,需要的朋友可以参考下

一、显示效果

iOS 仿微博客户端红包加载界面 XLDotLoading效果

二、原理简介

1、思路

要实现这个效果需要先知道这两个硬币是怎样运动的,然后通过放大、缩小的效果实现的这种有距离感的效果。思路如下:

一、这两个硬币是在一定范围内做相对运动的,可以先使一个硬币在一个固定范围内做左右的往复运动,另一个硬币和它做“相对运动”即可。

二、让硬币从左至右移动时先变小再回复正常;从右至左移动时先变大再回复正常;这样就实现了这用有距离感的“相对运动”。

2、代码

第一步 要实现一个硬币在一定范围内实现左右往复运动,需要先固定一个范围,当运动到左边缘时让其向右运动,当运动到有边缘时让其向左运动。

这里用到了mvc的思想,先创建一个模型xldot,给这个模型添加一个direction属性,然后通过改变模型direction属性从而改变运动方向。

?
1
2
3
4
5
6
7
8
9
10
11
typedef ns_enum(nsinteger,dotditection)
{
  dotditectionleft = -1,
  dotditectionright = 1,
};
@interface xldot : uiview
//移动方向 就两种 左、右
@property (nonatomic,assign) dotditection direction;
//字体颜色
@property (nonatomic,strong) uicolor *textcolor;
@end

先初始化一个豆,放在容器的左边,方向设为向右

?
1
2
3
4
5
6
7
8
//初始化存放豆豆的的容器
_dotcontainer = [[uiview alloc] initwithframe:cgrectmake(0, 0, 320, 200)];
_dotcontainer.center = self.center;
[self addsubview:_dotcontainer];
xldot *dot = [[xldot alloc] initwithframe:cgrectmake(0, 0, [self dotwidth],[self dotwidth])];
dot.backgroundcolor = [uicolor redcolor];
dot.direction = dotditectionright;
[_dotcontainer addsubview:dot];

 通过cadisplaylink实现刷新工作,代码如下

?
1
2
_link = [cadisplaylink displaylinkwithtarget:self selector:@selector(reloadview)];
[_link addtorunloop:[nsrunloop mainrunloop] formode:nsrunloopcommonmodes];

刷新代码如下,通过移动到左右边缘,改变direction属性

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//刷新ui
-(void)reloadview
{
  xldot *dot1 = _dots.firstobject;
  //改变移动方向、约束移动范围
  //移动到右边距时
  if (dot1.center.x >= _dotcontainer.bounds.size.width - [self dotwidth]/2.0f) {
    cgpoint center = dot1.center;
    center.x = _dotcontainer.bounds.size.width - [self dotwidth]/2.0f;
    dot1.center = center;
    dot1.direction = dotditectionleft;
    [_dotcontainer bringsubviewtofront:dot1];
  }
  //移动到左边距时
  if (dot1.center.x <= [self dotwidth]/2.0f) {
    dot1.center = cgpointmake([self dotwidth]/2.0f, dot1.center.y);
    dot1.direction = dotditectionright;
    [_dotcontainer sendsubviewtoback:dot1];
  }
  //更新第一个豆的位置
  cgpoint center1 = dot1.center;
  center1.x += dot1.direction * [self speed];
  dot1.center = center1;
}

显示效果:

iOS 仿微博客户端红包加载界面 XLDotLoading效果

第二步 实现向左移动先放大再回复正常、向右运动先变小再回复正常。

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//显示放大、缩小动画
-(void)showanimationsofdot:(xldot*)dot
{
  cgfloat apart = dot.center.x - _dotcontainer.bounds.size.width/2.0f;
  //最大距离
  cgfloat maxappart = (_dotcontainer.bounds.size.width - [self dotwidth])/2.0f;
  //移动距离和最大距离的比例
  cgfloat appartscale = apart/maxappart;
  //获取比例对应余弦曲线的y值
  cgfloat transfomscale = cos(appartscale * m_pi/2.0);
  //向右移动则 中间变大 两边变小
  if (dot.direction == dotditectionleft) {
    dot.transform = cgaffinetransformmakescale(1 + transfomscale/4.0f, 1 + transfomscale/4.0f);
    //向左移动则 中间变小 两边变大
  }else if (dot.direction == dotditectionright){
    dot.transform = cgaffinetransformmakescale(1 - transfomscale/4.0f,1 - transfomscale/4.0f);
  }
}

原理是利用余弦函数曲线-π/2到π/2先变大再变小的特性

iOS 仿微博客户端红包加载界面 XLDotLoading效果

效果如下:

iOS 仿微博客户端红包加载界面 XLDotLoading效果

第三步 放置另一个豆豆,和第一个豆豆做“相对运动”,包括放大变小、运动方向;

保证相对距离的代码:

?
1
2
3
4
cgfloat apart = dot1.center.x - _dotcontainer.bounds.size.width/2.0f;
cgpoint center2 = dot2.center;
center2.x = _dotcontainer.bounds.size.width/2.0f - apart;
dot2.center = center2;

效果如下:

iOS 仿微博客户端红包加载界面 XLDotLoading效果

稍加润色后:

iOS 仿微博客户端红包加载界面 XLDotLoading效果

三、代码

github地址

以上所述是小编给大家介绍的ios 仿微博客户端红包加载界面 xldotloading效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://blog.csdn.net/u013282507/article/details/54907724

延伸 · 阅读

精彩推荐
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17