读书频道 > 网站 > 网页设计 > iOS 5编程入门经典(第3版)——开发iPhone与iPad应用
13.2.1 平移
12-11-08    奋斗的小年轻
收藏    我要投稿   
本书面向iPhone和iPad开发初学者,涵盖了iOS开发的各个主题。本书的编写方式是渐进式的,这样读者就不会由于细节过多而疲于奔命。我认为最好的学习方式就是去实践,因此全书大量的试一试首先会介绍如何构建某个应...立即去当当网订购

要想在视图上进行仿射变换,只须使用视图的transform属性即可。回忆一下前面的示例,通过视图的center属性可以设置其新位置:

    imageView.center = CGPointMake(imageView.center.x + delta.x,
imageView.center.y + delta.y);

借助于2D变换,可以将视图的transform属性设置为CGAffineTransformMake- Translation()函数所返回的CGAffineTransform数据结构,如以下代码所示:
//--—add the following bold line in the AnimationViewController.h file—--
#import <UIKit/UIKit.h>

@interface AnimationViewController : UIViewController
{
    IBOutlet UIImageView *imageView;
    IBOutlet UISlider *slider;
    CGPoint delta;
    NSTimer *timer;
    float ballRadius;
   
    //---add this line---
    CGPoint translation;
}

@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UISlider *slider;

-(IBAction) sliderMoved:(id) sender;

@end


//---add the following bold lines in the AnimationViewController.m file---
- (void)viewDidLoad {
    ballRadius = imageView.bounds.size.width / 2;
    [slider setShowValue:YES];
    delta = CGPointMake(12.0,4.0);

    translation = CGPointMake(0.0,0.0);

    timer = [NSTimer scheduledTimerWithTimeInterval:slider.value
                                                    target :self
                                                  selector :@selector(onTimer)
userInfo:nil
repeats:YES];
    [super viewDidLoad];
}

-(void) onTimer {   
    [UIView animateWithDuration:slider.value    
                               delay:0.0f
                            options :UIViewAnimationOptionAllowUserInteraction |
                                     UIViewAnimationOptionCurveLinear
                     animations:^{
        imageView.transform =
            CGAffineTransformMakeTranslation(translation.x,
translation.y);   
                     }
                     completion:nil];
   
    translation.x += delta.x;
    translation.y += delta.y;
   
    if (imageView.center.x + translation.x >
        self.view.bounds.size.width - ballRadius ||
        imageView.center.x + translation.x < ballRadius)
        delta.x = -delta.x;   
   
    if (imageView.center.y + translation.y >
        self.view.bounds.size.height - ballRadius ||
        imageView.center.y + translation.y < ballRadius)
        delta.y = -delta.y;
}

CGAffineTransformMakeTranslation()函数接受两个参数—沿x轴移动的距离与沿y轴移动的距离。

上述代码的作用与设置Image View的center属性一样。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站