iOS 简单实现类似twitter的推门效果

#import "KDViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface KDViewController ()
{
    CALayer *leftLayer;
    CALayer *rightLayer;
}
@end

@implementation KDViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    UIImage *src = [UIImage imageNamed:@"1.jpg"];
    CGImageRef leftCGImage = CGImageCreateWithImageInRect(src.CGImage, CGRectMake(0.0f, 0.0f, src.size.width * 0.5f, src.size.height));
    CGImageRef rightCGImage = CGImageCreateWithImageInRect(src.CGImage, CGRectMake(src.size.width * 0.5f, 0.0f, src.size.width * 0.5f, src.size.height));
    
    CGSize s = src.size;
    
    leftLayer = [CALayer layer];
    leftLayer.contents = (id)leftCGImage;
    leftLayer.frame = CGRectMake(0.0f, 0.0f, s.width * 0.5f, s.height);
    [self.view.layer addSublayer:leftLayer];
    
    rightLayer = [CALayer layer];
    rightLayer.contents = (id)rightCGImage;
    rightLayer.frame = CGRectMake(s.width * 0.5f, 0.0f, s.width * 0.5f, s.height);
    [self.view.layer addSublayer:rightLayer];
    
    leftLayer.position = CGPointMake(0, leftLayer.frame.size.height * 0.5f);
    leftLayer.anchorPoint = CGPointMake(0.0f, 0.5f);
    
    rightLayer.position = CGPointMake(rightLayer.frame.size.width * 2, rightLayer.frame.size.height * 0.5f);
    rightLayer.anchorPoint = CGPointMake(1.0f, 0.5f);
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    [self.view addGestureRecognizer:tap];
    [tap release];
}

- (void)tap:(UITapGestureRecognizer *)gesture {
    [CATransaction begin];
    [CATransaction setAnimationDuration:5];
    CATransform3D t = CATransform3DIdentity;
    t.m34 = -1 / leftLayer.frame.size.width;
    leftLayer.transform = CATransform3DConcat(t, CATransform3DRotate(leftLayer.transform, -M_PI_2, 0, 1, 0));
    rightLayer.transform = CATransform3DConcat(t, CATransform3DRotate(rightLayer.transform, M_PI_2, 0, 1, 0));
    [CATransaction commit];
}

@end

简单实现了下,只需要传入一张图片即可。对3d矩阵的理解依然不够,尚待后续探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值