让图片左右缓慢移动的MoveView

简介:

让图片左右缓慢移动的MoveView

效果:

源码:

MoveView.h 与 MoveView.m

//
//  MoveView.h
//  AnimationView
//
//  Created by XianMingYou on 15/1/28.
//  Copyright (c) 2015年 XianMingYou. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum : NSUInteger {
    MV_RIGHT = 0x19871220, // 开始时候向右移动
    MV_LEFT,               // 开始时候向左移动
} EStartMoveDirection;

@interface MoveView : UIView

@property (nonatomic) CGFloat               animationDuration; // 移动动画持续的时间
@property (nonatomic) EStartMoveDirection   direction;         // 起始移动的方向(默认值向右)
@property (nonatomic, strong) UIImage      *image;             // 输入的图片

/**
 *  创建出view
 */
- (void)buildView;

/**
 *  开始动画
 */
- (void)doAnimation;

/**
 *  透明百分比
 *
 *  @param percent 百分比(0 ~ 1)
 */
- (void)alphaPercent:(CGFloat)percent;

@end


//
//  MoveView.m
//  AnimationView
//
//  Created by XianMingYou on 15/1/28.
//  Copyright (c) 2015年 XianMingYou. All rights reserved.
//

#import "MoveView.h"

@interface MoveView ()

@property (nonatomic, strong) UIImageView *imageView;

@property (nonatomic) CGRect  startFrame; // 起始frame值
@property (nonatomic) CGRect  endFrame;   // 结束frame值

@end

@implementation MoveView

- (void)buildView {
    // 添加遮罩
    self.layer.masksToBounds = YES;
    
    // 如果没有图片,则直接退出
    if (self.image == nil) {
        return;
    }

    // 获取图片高度
    CGFloat height         = self.frame.size.height;
    CGSize imageSize       = self.image.size;
    CGFloat imageViewWidth = height / imageSize.height * imageSize.width;
    
    // 获取到了尺寸
    self.imageView       = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, imageViewWidth, height)];
    self.imageView.image = self.image;
    
    // 获取初始尺寸
    self.startFrame = self.imageView.frame;
    self.endFrame   = CGRectMake(self.frame.size.width - self.imageView.frame.size.width, 0, imageViewWidth, height);
    
    [self addSubview:self.imageView];
}

- (void)doAnimation {
    // 获取默认值
    if (self.direction != MV_RIGHT && self.direction != MV_LEFT) {
        self.direction = MV_RIGHT;
    }
    
    if (self.direction == MV_RIGHT) {
        self.imageView.frame = self.startFrame;
    } else {
        self.imageView.frame = self.endFrame;
    }
    
    // 获取动画时间
    self.animationDuration = (self.animationDuration <= 0 ? 10.f : self.animationDuration);
    
    // 开始动画
    [self startAnimation];
}

- (void)alphaPercent:(CGFloat)percent {
    self.alpha = percent;
}

- (void)startAnimation {
    
    if (self.direction == MV_RIGHT) {
        [UIView animateWithDuration:self.animationDuration
                         animations:^{
                             self.imageView.frame = self.endFrame;
                         } completion:^(BOOL finished) {
                             [UIView animateWithDuration:self.animationDuration
                                              animations:^{
                                                  self.imageView.frame = self.startFrame;
                                              } completion:^(BOOL finished) {
                                                  [self startAnimation];
                                              }];
                         }];
    } else {
        [UIView animateWithDuration:self.animationDuration
                         animations:^{
                             self.imageView.frame = self.startFrame;
                         } completion:^(BOOL finished) {
                             [UIView animateWithDuration:self.animationDuration
                                              animations:^{
                                                  self.imageView.frame = self.endFrame;
                                              } completion:^(BOOL finished) {
                                                  [self startAnimation];
                                              }];
                         }];
    }
}

@end

控制器源码:
//
//  ViewController.m
//  MoveView
//
//  Created by YouXianMing on 15/1/28.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "MoveView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 背景移动的图
    MoveView *moveView         = [[MoveView alloc] initWithFrame:self.view.bounds];
    moveView.image             = [UIImage imageNamed:@"1.jpg"];
    moveView.animationDuration = 15;
    moveView.direction         = MV_RIGHT;
    [moveView buildView];
    [moveView doAnimation];
    
    [self.view addSubview:moveView];
}

@end

核心要点:

目录
相关文章
|
存储 前端开发 定位技术
前端加载超大图片实现秒开解决方案
前端加载超大图片实现秒开解决方案
|
2月前
|
缓存 前端开发
SPA首屏加载速度慢的怎么解决?
SPA首屏加载速度慢的怎么解决?
32 0
|
6月前
|
编解码 算法 UED
效地减小图片文件的大小
【4月更文挑战第26天】效地减小图片文件的大小
55 6
|
6月前
|
测试技术 iOS开发
蓝条下压和消失导致页面错乱问题解决方案
蓝条下压和消失导致页面错乱问题解决方案
47 0
|
6月前
|
前端开发
html+css实现图片缓慢变大效果
html+css实现图片缓慢变大效果
179 0
|
6月前
|
缓存 前端开发 JavaScript
SPA首屏加载速度慢怎么解决
SPA(单页面应用)的首屏加载速度慢可能是由于以下几个方面造成的:
86 0
|
存储 缓存 前端开发
意外之惊喜!浏览器缓存优化方案,让页面加载速度飙升48.5%!
经过对浏览器缓存优化方案的调研和实现过程,我发现了一个令人意外的发现:**页面加载速度提升了整整48.5%!** 这个令人震撼的结果在微前端架构项目中具有重要意义,同时虽然本文是针对微前端架构的,但这个浏览器缓存优化方案同样适用于其他前端项目。本文将深入探讨这个优化方案,并分享调试和改进的经验。
431 1
意外之惊喜!浏览器缓存优化方案,让页面加载速度飙升48.5%!
|
存储
ps打开之后切图一段时间C盘存储量变小怎么清理?
首先不想占用C盘空间的话可以打开ps->编辑->首选项->暂存盘,更改为除C盘外的其他盘,这个暂存盘存储的是使用ps切图时产生的临时存储文件,默认是C盘,ps关闭之后,一般会释放。
172 0
|
Web App开发 机器学习/深度学习 TensorFlow
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
图片迟迟加载不了、一片马赛克?谷歌开源模型优先显示图像受关注部分
|
缓存 JavaScript UED
网站打开缓慢的原因有哪些?
在进行站点优化时,很多站长会发现我们的网站有时运行速度很快,有时运行速度很慢,严重影响了用户体验。因此,有必要理解为什么网站变得很慢。如今,可以帮助你了解为什么我们的网站会慢下来。
270 1
网站打开缓慢的原因有哪些?