两个3D效果
来源:互联网 发布:闪图在线制作软件 编辑:程序博客网 时间:2024/05/02 01:09
第一种:
是大家都知道的开源代码openflow,相关链接:http://www.s
第二种:
绕某个中心线旋转的3D效果特效
代码如下:
.h里
#import<UIKit/UIKit.h>
@interface Test3DController :UIViewController {
float currentAngle;
float lastAngle;
NSTimer *animationTimer;
NSMutableArray *carouselViews;
UITouch *trackingTouch;
}
@end
#import<QuartzCore/QuartzCore.h>
#import"Test3DController.h"
@implementation Test3DController
- (void)setCarouselAngle:(float)angle
{
// we want to step around the outside of a circle in
// linear steps; work out the distance from one step
// to the next
float angleToAdd = 360.0f / [carouselViewscount];
// apply positions to all carousel views
for(UIView *viewin carouselViews)
{
NSLog(@"3D view : %f,%f",view.frame.origin.x,view.frame.origin.y);
float angleInRadians = angle * M_PI / 180.0f;
// get a location based on the angle
float xPosition = (self.view.frame.size.width * 0.5f) + 100.0f *sinf(angleInRadians);
float yPosition = (self.view.frame.size.height * 0.5f) + 30.0f *cosf(angleInRadians);
// get a scale too; effectively we have:
//
// 0.75f the minimum scale
// 0.25f the amount by which the scale varies over half a circle
//
// so this will give scales between 0.75 and 1.25. Adjust to suit!
float scale = 0.75f + 0.25f * (cosf(angleInRadians) + 1.0);
// apply location and scale
view.transform =CGAffineTransformScale(CGAffineTransformMakeTranslation(xPosition, yPosition), scale, scale);
// tweak alpha using the same system as applied for scale, this time
// with 0.3 the minimum and a semicircle range of 0.5
view.alpha = 0.3f + 0.5f * (cosf(angleInRadians) + 1.0);
// setting the z position on the layer has the effect of setting the
// draw order, without having to reorder our list of subviews
view.layer.zPosition = scale;
// work out what the next angle is going to be
angle += angleToAdd;
}
}
- (void)animateAngle
{
// work out the difference between the current angle and
// the last one, and add that again but made a bit smaller.
// This gives us inertial scrolling.
float angleNow = currentAngle;
currentAngle += (currentAngle -lastAngle) * 0.97f;
lastAngle = angleNow;
// push the new angle into the carousel
[selfsetCarouselAngle:currentAngle];
// if the last angle and the current one are now
// really similar then cancel the animation timer
if(fabsf(lastAngle -currentAngle) < 0.001)
{
[animationTimerinvalidate];
animationTimer = nil;
}
}
-(void)btnCallBack:(id)sender
{
UIButton *btn = (UIButton*)sender;
NSLog(@"BUTTON PRESS view tag : %d",btn.tag);
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[superviewDidLoad];
//[self.view setBackgroundColor:[UIColor blackColor]];
// create views that are an 80x80 rect, centred on (0, 0)
CGRect frameForViews = CGRectMake(-40, -40, 80, 80);
// create six views, each with a different colour.
carouselViews = [[NSMutableArrayalloc] initWithCapacity:6];
int c = 7;
while(c--)
{
//UIView *view = [[UIView alloc] initWithFrame:frameForViews];
UIButton *view = [UIButtonbuttonWithType:UIButtonTypeCustom];
[view setFrame:frameForViews];
//[view setBounds:frameForViews];
view.tag = c;
// We don't really care what the colours are as long as they're different,
// so just do anything
view.backgroundColor = [UIColorcolorWithRed:(c&4) ? 1.0 : 0.0 green:(c&2) ? 1.0 : 0.0 blue:(c&1) ? 1.0 : 0.0alpha:1.0];
[viewaddTarget:selfaction:@selector(btnCallBack:)forControlEvents:UIControlEventTouchUpInside];
// make the view visible, also add it to our array of carousel views
[carouselViewsaddObject:view];
[self.viewaddSubview:view];
}
currentAngle = lastAngle = 0.0f;
[selfsetCarouselAngle:currentAngle];
/*
Note: I've omitted viewDidUnload for brevity; remember to implement one and
clean up after all the objects created here
*/
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// if we're not already tracking a touch then...
if(!trackingTouch)
{
// ... track any of the new touches, we don't care which ...
trackingTouch = [touches anyObject];
// ... and cancel any animation that may be ongoing
[animationTimerinvalidate];
animationTimer = nil;
lastAngle = currentAngle;
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
// if our touch moved then...
if([touchescontainsObject:trackingTouch])
{
// use the movement of the touch to decide
// how much to rotate the carousel
CGPoint locationNow = [trackingTouchlocationInView:self.view];
CGPoint locationThen = [trackingTouchpreviousLocationInView:self.view];
lastAngle = currentAngle;
currentAngle += (locationNow.x - locationThen.x) * 180.0f /self.view.bounds.size.width;
// the 180.0f / self.view.bounds.size.width just says "let a full width of my view
// be a 180 degree rotation"
// and update the view positions
[selfsetCarouselAngle:currentAngle];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// if our touch ended then...
if([touchescontainsObject:trackingTouch])
{
// make sure we're no longer tracking it
trackingTouch = nil;
// and kick off the inertial animation
animationTimer = [NSTimerscheduledTimerWithTimeInterval:0.02 target:selfselector:@selector(animateAngle)userInfo:nilrepeats:YES];
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
// treat cancelled touches exactly like ones that end naturally
[selftouchesEnded:touches withEvent:event];
}
@end
- 两个3D效果
- 3D效果表格
- ubuntu 3D效果
- 按钮3D效果
- LWUIT 3D效果
- Ubuntu 3D效果
- 页面3D效果
- javascript 3D效果
- 3D效果相册
- css3 3D效果
- 关于3D效果
- css 3d效果
- 3D效果
- CSS3 3D效果
- 3D效果
- 3D旋转效果
- html5 3d效果
- CSS3 3D效果
- yum命令详解
- DIV CSS网页制作的流程及方法
- 才学 android 做了几个小例子 进度条
- 关于PD 中的 表对象 如何同时显示name 与code 的问题
- android完全退出程序
- 两个3D效果
- 关于Preference相关控件修改出现的问题
- MSP430驱动DDS模块AD9851
- 404们都代表什么?网页错误代码图解
- 自定义事件格式--常用的 Java编写的各种时间格式类
- 编程语言中的强类型和弱类型
- 12.1.2 在 C# 中使用迭代器
- Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
- 有关Activity的Launch mode 以及Intent的setFlags