2016-09-01 16:07:57 SharkToping 阅读数 404

在tableView即将展示的时候调用UITableViewDelegate中的方法

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    //3D效果滑动cell可实现3D动画翻转效果

    cell.layer.transform =CATransform3DMakeRotation(M_PI,0, 0,1);

    //翻转后需要添加动画恢复

    [UIViewanimateWithDuration:0.5animations:^{

        cell.layer.transform =CATransform3DIdentity;

    }];

}


2016-08-02 19:41:04 a117653909 阅读数 2147

在测试Unity3D ZXing代码时,调用iOS摄像头的效果总不令我满意,你会发现用WebCamTexture调用的摄像头画面跟iOS自带相册调用的效果不一样,焦距有点问题。虽然这不影响ZXing的调用,但我还是搜了下,解决了这个问题,还可以适应屏幕旋转。参考了下面链接。

https://github.com/keijiro/WebCamRotation

最终代码见https://github.com/linmq/ZXing_Unity3D_Test

当然,也可以在Unity3D中调用iOS相机的代码来解决。

2015-12-09 12:18:00 hc3862591 阅读数 2739

//

//  ViewController.m

//  3D动态旋转动画

//

//  Created by 杨继雷 on 15/12/9.

//  Copyright © 2015杨继雷. All rights reserved.

//


#import "ViewController.h"

#define imageCount 5

@interface ViewController ()

{

    UIImageView *_imageView;

    int _currentIndex;

}

@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    _imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(0,50, 320, 480)];

    _imageView.contentMode=UIViewContentModeScaleAspectFit;

    _imageView.image=[UIImageimageNamed:@"picture0.jpg"];//默认图片

    [self.viewaddSubview:_imageView];

    //添加手势

    UISwipeGestureRecognizer *leftSwipeGesture=[[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(leftSwipe:)];

    leftSwipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;

    [self.viewaddGestureRecognizer:leftSwipeGesture];

    

    UISwipeGestureRecognizer *rightSwipeGesture=[[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(rightSwipe:)];

    rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionRight;

    [self.viewaddGestureRecognizer:rightSwipeGesture];

    // Do any additional setup after loading the view, typically from a nib.

}

#pragma mark 向左滑动浏览下一张图片

-(void)leftSwipe:(UISwipeGestureRecognizer *)gesture{

    [selftransitionAnimation:YES];

}


#pragma mark 向右滑动浏览上一张图片

-(void)rightSwipe:(UISwipeGestureRecognizer *)gesture{

    [selftransitionAnimation:NO];

}


#pragma mark 转场动画

-(void)transitionAnimation:(BOOL)isNext{

    //1.创建转场动画对象

    CATransition *transition=[[CATransitionalloc]init];

    

    //2.设置动画类型,注意对于苹果官方没公开的动画类型只能使用字符串,并没有对应的常量定义

    transition.type=@"cube";

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef enum : NSUInteger {
    Fade = 1,                   //淡入淡出
    Push,                       //推挤
    Reveal,                     //揭开
    MoveIn,                     //覆盖
    Cube,                       //立方体
    SuckEffect,                 //吮吸
    OglFlip,                    //翻转
    RippleEffect,               //波纹
    PageCurl,                   //翻页
    PageUnCurl,                 //反翻页
    CameraIrisHollowOpen,       //开镜头
    CameraIrisHollowClose,      //关镜头
    CurlDown,                   //下翻页
    CurlUp,                     //上翻页
    FlipFromLeft,               //左翻转
    FlipFromRight,              //右翻转
     
} AnimationType;

    

    //设置子类型

    if (isNext) {

        transition.subtype=kCATransitionFromRight;

    }else{

        transition.subtype=kCATransitionFromLeft;

    }

    //设置动画时常

    transition.duration=1.0f;

    

    //3.设置转场后的新视图添加转场动画

    _imageView.image=[selfgetImage:isNext];

    [_imageView.layeraddAnimation:transition forKey:@"KCTransitionAnimation"];

}


#pragma mark 取得当前图片

-(UIImage *)getImage:(BOOL)isNext{

    if (isNext) {

        _currentIndex=(_currentIndex+1)%imageCount;

    }else{

        _currentIndex=(_currentIndex-1+imageCount)%imageCount;

    }

    NSString *imageName=[NSStringstringWithFormat:@"picture%i.jpg",_currentIndex];

    return [UIImageimageNamed:imageName];

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


2018-09-13 09:45:56 say_from_wen 阅读数 548

写在开头

项目中UI设计了一个仿IOS界面跳转3D翻转的效果,尼玛人家系统自带的啊。无奈只好找轮子了,看了看网上全是一个acitivity两个VIew或者两个Fragment的跳转,作为技术人的执着不想那么实现,本来没有关系的两个界面硬生生写在一个activity下不是我想要的。
下载链接在文末!!!

先看下效果吧,看是不是你想要的,背景大白,您可以设置你想要的默认背景。
这里写图片描述

实现思路思考

1.本来打算用系统提供的overridePendingTransition方法实现跳转,可无奈试了N种方法后我放弃了,如果您有好的方式可以沟通一下。
2.采用网上一个Activity两个VIew或者Fragment实现,我主动放弃了,如果符合你的要求可以自行Google。当时也考虑到了5.0以后加入的转场动画,最终也不能实现。
3.那为什么我不能单独给两个Activity的根View设置3D翻转动画,一个从-90度到0度,另一个从-270到-360度。那么,我们怎么实现View的3D翻转呢?Rotate3dAnimation,他能很轻松的帮助我们3D翻转的效果。

先撸一撸大体功能怎么实现

Activity1:
首先,在第一个Activity中我们先实现根View的翻转工作,在翻转结束后再实现界面的Intent跳转,我用Handler来实现这部分操作。看一下代码:我们首先得到屏幕的宽和高,然后确定中心翻转位置。

  val screenBounds = ScreenUtils.getScreenBounds(this)
        mWidth = screenBounds[0]
        mHeight = screenBounds[1]
        main_layout.setOnClickListener(View.OnClickListener {
            ll = findViewById<View>(R.id.main_layout)
            val animationSet = AnimationSet(true)
            val depthZ = 450f
            rotate3dAnimationX = Rotate3dAnimation()
            rotate3dAnimationX?.Rotate3dAnimation(0F, -90F, mWidth/2.0F, mHeight/2.0F, depthZ, true)
            animationSet.addAnimation(rotate3dAnimationX)
            animationSet.duration = 250
            animationSet.fillAfter = true
            animationSet.interpolator = AccelerateDecelerateInterpolator()
            ll?.startAnimation(animationSet)
            val mMessage = Message.obtain()
            mMessage.what = 1001
            // 使用sendEmptyMessageDelayed延时1s后发送一条消息
            mHandler.sendEmptyMessageDelayed(MainActivity.MESSAGE_WHAT, 240)
        })



 private val mHandler: Handler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            when (msg?.what) {
                MainActivity.MESSAGE_WHAT -> {
                    gotoIntent()
                }
                else -> {
                }
            }
        }
    }

大家可以看到,我动画执行的时间为250ms,但是我在240ms就用handler实现界面的跳转了,这也是在调试的时候遇到的一个小问题吧,稍后会说明。在第一个界面,我逆向旋转了90度。

Activity2:

相同的,在第二个Activity中,我把View执行了从-270度到-360度的翻转,也就是视觉上从底下翻上来的效果,简单的看下代码:

  private val mHandler: Handler = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            when (msg?.what) {
                Main2Activity.MESSAGE_WHAT -> {
                    val ll = findViewById<View>(R.id.main2_layout)
                    //在此处练习了下动画集合的用法  可直接使用rotate3dAnimationX动画
                    val animationSet = AnimationSet(true)
                    val depthZ = 450f
                    val rotate3dAnimationX = Rotate3dAnimation()
                    rotate3dAnimationX.Rotate3dAnimation(-270F, -360F, mWidth/2.0F, mHeight/2.0F, depthZ, false)
                    animationSet.addAnimation(rotate3dAnimationX)
                    animationSet.duration = 250
                    animationSet.fillAfter = true
                    animationSet.interpolator = AccelerateDecelerateInterpolator()
                    ll?.startAnimation(animationSet)
                }
                else -> {
                }
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
        setContentView(R.layout.activity_main2)
        val screenBounds = ScreenUtils.getScreenBounds(this)
        mWidth = screenBounds[0]
        mHeight = screenBounds[1]
        val mMessage = Message.obtain()
        mMessage.what = 1001
        // 使用sendEmptyMessageDelayed延时1s后发送一条消息
        mHandler.sendEmptyMessageDelayed(Main2Activity.MESSAGE_WHAT, 0)
    }

就这样就实现了吗?未免太过分了,还有很多坑。

实现过程中遇到的问题和解决方法

(如果您有好的解决方法,烦请告知)

Tim1:我去除了Activity默认的跳转效果,但是在衔接的地方还是有明显的卡顿效果。
通过查阅资料,即使我们取消了默认的跳转效果,但是他是两个Activity,在转换的过程还是有一定的切换效果呢?那么我们就给它设置一个效果呗,只不过没有任何动画。例如:

在跳转时设置无动画效果:

  private fun gotoIntent() {
        val intent = Intent(this, Main2Activity().javaClass)
        this.startActivity(intent)
        //写两个空动画 去除两个activity间明显的卡顿效果
        this.overridePendingTransition(R.anim.fade_in, R.anim.fade_in)
    }

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="1.0" android:toXDelta="1.0"
        android:fromYDelta="1.0" android:toYDelta="1.0"
        android:duration="0" />
</set>

Tim2:第一个Activity跳转后在返回界面消失:
返回后界面消失了,我的天!!!翻转后状态没返回来?才疏学浅,找了找也没发现有方法可以重置状态,只能这么办了,自己看吧,太low了,哎!

        //在界面执行此方法时 把界面恢复原来的状态  暂时没想到其他好的方法
    override fun onStop() {
        val animationSet = AnimationSet(true)
        rotate3dAnimationX?.Rotate3dAnimation(-90F, 0F, mWidth/2.0F, mHeight/2.0F, 0F, true)
        animationSet.duration = 0
        animationSet.addAnimation(rotate3dAnimationX)
        ll?.startAnimation(animationSet)
        super.onStop()
    }

Tim3:之前的问题,在第一个界面我为什么提前10秒钟开始跳转逻辑呢?

哈哈,其实我也不知道,在时间同步的情况下,我发现在两个Activity的衔接处,还是有一点点的衔接效果,思考了下,我如果让下一个Activity提前开始动画呢,会不会好一点,事实证明了我的想法,至少在视觉上很好了。

写在最后

跌跌撞撞,反正效果实现了,如果您也有这样的需求,欢迎探讨更好的实现方式!!!

PS:下载链接:https://download.csdn.net/download/say_from_wen/10664221
github:https://github.com/loveAndroidAndroid/android-study

2016-08-18 00:24:37 u011171043 阅读数 1585

1.关于layer层的旋转方向问题

  layer层遵守 左手坐标系:x向右,y向下,z朝向自己(左手大拇指顺着z轴指去,握紧拳头其余4指由x轴到y轴)


  前提:当旋转角度为正数的时候逆时针旋转,当旋转角度为负数的时候顺时针旋转

永远记着xyz的矢量方向性,如绕z轴旋转就是zxy,x-》y为正,为逆时针方向旋转,反之y-》x就是顺时针

     如绕x轴旋转就是xyz,y-》z为正数,为逆时针

     如绕y轴旋转就是yzx,z-》x就是正数,为逆时针

       注意:(xyz无论怎么交换方向性不变永远x-》y-》z)

当绕z轴旋转,x---》y为逆时针

   CATransform3D unit =CATransform3DIdentity;//单位矩阵

unit = CATransform3DRotate(unit,M_PI_4, 0,0, 1);//绕Z轴逆时针旋转

http://img.blog.csdn.net/20160818002718082?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


   unit = CATransform3DRotate(unit, -M_PI_4,0,0,1);//绕Z轴顺时针时针旋转】
http://img.blog.csdn.net/20160818002751160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


当绕x轴旋转,y-》z为逆时针

     unit = CATransform3DRotate(unit,M_PI_4, 1,0, 0);//绕x轴逆时针

http://img.blog.csdn.net/20160818002826911?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
   unit = CATransform3DRotate(unit, -M_PI_4,1,0,0);//绕x轴顺时针
http://img.blog.csdn.net/20160818002856239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


当绕y轴旋转的时候,z-》x为逆时针

     unit = CATransform3DRotate(unit,M_PI_4, 0,1, 0);

http://img.blog.csdn.net/20160818002938286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


     unit = CATransform3DRotate(unit, -M_PI_4,0, 1,0);

http://img.blog.csdn.net/20160818002956214?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center









没有更多推荐了,返回首页