分享一个自己做的3d立方体(在瑞士航空见到过类似的这种首页),还可以添加以下要素变得更加完善:
1)旋转过程中每个面的透明度可以更改
2)手势滑动结束可以添加惯性转动动画
效果如图:
直接上代码了 ,直接全粘贴到一个swift文件里既可以使用
1.声明变量 公共函数
import UIKit
class CubeMenuView: UIView {
//立方体四个面
var sidesArray: [UIImageView]!
//立方体上面
var topImageView: UIImageView!
//立方体下面阴影
var shadowImageView: UIImageView!
//立方体每个面的长宽
var cubeWidth: CGFloat = 0.0
//记录手势开始点
var beginPoint: CGPoint?
//手势停止时x轴移动的距离
var moveX: CGFloat = 0.0
//每个面移动的角度
var moveAngle: CGFloat = 0.0
//每个面当前的角度
var currentAngle: CGFloat = 0.0
//最前面一个面的index
var currentIndex: UInt = 1
//整个立方体沿X轴的倾斜角度
let kCubeInclinedAngle_Y: CGFloat = -CGFloat(M_PI_4 / 4.0)
let distanceZ: CGFloat = 1000.0
func CATransform3DMakePerspective(center: CGPoint, disZ: CGFloat) -> CATransform3D{
let transToCenter = CATransform3DMakeTranslation(-center.x, -center.y, 0)
let transBack = CATransform3DMakeTranslation(center.x, center.y, 0)
var scale = CATransform3DIdentity
scale.m34 = -1.0 / disZ
return CATransform3DConcat(CATransform3DConcat(transToCenter, scale), transBack)
}
func CATransform3DPerspect(t: CATransform3D, center: CGPoint, disZ: CGFloat) -> CATransform3D {
return CATransform3DConcat(t, CATransform3DMakePerspective(center, disZ: disZ))
}
func randomColor() -> UIColor {