maskView遮罩中多张图片的动画

maskView遮罩中多张图片的动画

说明

用多张图片做遮罩效率极高,非常好理解,而且极其美观!

效果图

素材

 

源码

//
//  ViewController.m
//  FeedBack
//
//  Created by YouXianMing on 15/5/6.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "UIView+SetRect.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 前景图
    UIImageView *background = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    background.image        = [UIImage imageNamed:@"base"];
    background.center       = self.view.center;
    [self.view addSubview:background];

    // 背景图
    UIImageView *upGround = [[UIImageView alloc] initWithFrame:background.frame];
    upGround.image        = [UIImage imageNamed:@"background"];
    [self.view addSubview:upGround];

    // maskView
    UIView *mask      = [[UIView alloc] initWithFrame:upGround.bounds];
    upGround.maskView = mask;

    // 图片1
    UIImageView *picOne = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 400)];
    picOne.image        = [UIImage imageNamed:@"1"];
    [mask addSubview:picOne];

    // 图片2
    UIImageView *picTwo = [[UIImageView alloc] initWithFrame:CGRectMake(100, -200, 100, 400)];
    picTwo.image        = [UIImage imageNamed:@"2"];
    [mask addSubview:picTwo];

    // 动画
    [UIView animateWithDuration:4.f delay:5.f options:0 animations:^{
        picOne.y -= 400;
        picTwo.y += 400;
    } completion:^(BOOL finished) {

    }];
}

@end
//
//  UIView+SetRect.h
//  TestPch
//
//  Created by YouXianMing on 14-9-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;
@end
//
//  UIView+SetRect.m
//  TestPch
//
//  Created by YouXianMing on 14-9-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;
}

@end
时间: 2024-10-01 05:07:18

maskView遮罩中多张图片的动画的相关文章

viewflipper-Android中ViewFlipper图片切换动画怎么写?

问题描述 Android中ViewFlipper图片切换动画怎么写? 布局如上所示,上面是一个button,下面是ViewFlipper,点击button后ViewFlipper中的图片自动切换,实现一个广告轮播效果.目前效果是右边出来把左边推出去,但是我想要不同的切换效果,比如写一个前面图片淡出显示出后面第二张图片,比如前面第一张缩小至一个点然后小时,后面第二张图片完全显示. 跪求大神指导,在线等,有点急. 解决方案 用timer,控制它的的showPrevious,showNext等

android-stackview 怎么设置stackview中两张图片的间隔和排列方向

问题描述 stackview 怎么设置stackview中两张图片的间隔和排列方向 我都找了一天了,网上一般用这个的好少. 解决方案 在线急等!!!!!!快来人 解决方案二: 没有 orientation 属性? 解决方案三: 去 xml文件中 看看 有什么 熟悉的属性

Cocos2d-x-v3中3D网格特效动画的应用

Cocos2d-x-v3中3D网格特效动画的应用 一.网格特效的使用原理         基础的动作是对节点整体进行移动,变形等操作,网格特效的原理是将节点分割成多个尺寸相同的网格,根据改变每个网格块的属性使整体节点产生3D的效果. 二.网格特效的基本用法       在cocos2d-x中,v3的版本新引入了一个类NodeGrid,专门用来包装网格的特效,示例如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16     //获取屏幕尺寸     Size v

用户体验中巧妙的过场动画

  (Adrian Zumbrunnen著 Judithzhu & Lynnwang译 查看原文 转载请注明出处MXD) 一些网页优于其他网页,不仅仅是因为它们的内容.可用程度.设计或是特色等等.现代网页间根本的区别在于它们交互及动画细节.我们将分享一些从各种模型中获得的经验,同时分析为何这些简单的样式能够如此好用. 当我们设计数码产品时,我们常常使用诸如Photoshop及Sketch这样的设计软件.大多数从事此行业多年的人显然知道设计不仅仅是视觉呈现.然而,很多人依然继续创造静止的设计.St

PowerPoint 2013中创建自定义路径动画的方法

  PowerPoint 2013中创建自定义路径动画的方法            1.在幻灯片中选择对象,在"动画"选项卡的"高级动画"组中单击"添加动画"按钮,在打开的下拉列表中选择"自定义路径"选项,如图1所示. 图1 选择"自定义路径"选项 2.此时鼠标指针变为十字形,在幻灯片中单击创建路径起点,然后按住左键移动鼠标,在适当位置单击创建拐点,绘制到路径终点后双击结束路径的绘制,此时动画会预览一次,幻

巧用PPT2010中的合并及动画刷做大量简报

本文介绍如何巧妙利用PowerPoint2010中的合并以及动画刷,在短时间内快速制作大量内容基本上重复的PPT演示文档. 年终将至,为了向公司员工和各级领导做年终汇报,总需要把各种报告.图表.表格数据制作成幻灯片同步演示以加强汇报效果.通常这类总结演示都存在大量相同或相似的内容.格式或动画要求,因此在制作时总要大量重复相同操作,这要浪费不少时间.有没有什么办法能减少重复操作,让我们更快速地完成总结演示的制作呢?在PPT 2010中确实有几种方法可以有效减少重复操作. 一.重用相同幻灯片 打开P

Android仿支付宝中余额宝的数字动画效果_Android

实现效果图: 下面是具体代码,可直接复制: package com.lcw.rabbit.widget; import android.animation.ObjectAnimator; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.view.animation.AccelerateDecelerateInterpola

在网页中调用一个flash动画,图片有黑边怎么去除?

问题描述 在网页中调用一个flash动画,图片有黑边怎么去除?

使用Instruments中的CoreAnimation分析动画

使用Instruments中的CoreAnimation分析动画   1. 打开Instruments中的CoreAnimation   2. 运行前的准备工作 要注意勾选以下选项,便于调试   3. 运行与调试   一些需要注意的细节: 1. 如果屏幕中,有超过50%的区域由半透明的layer叠加组成,如果执行滑动操作的话,很有可能导致卡顿. 2. 加载的图片尽量不要执行缩放操作,缩放会消耗额外的性能.比方说,你加载网络上的图片,就尽量加载图片大小尺寸的图片,而不要缩放较大的图片.   参考资