【iOS开发-43】万能的transform注意事项,以及viewWithTag以及.png后缀可以省略的一些知识

注意事项:

(1)图片如果是png格式的话,在代码中可以省略后缀。

(2)可以给控件一个tag值,然后用viewWithTag获取这个控件。

(3)transform的上下左右移动是按照它的上下左右边框垂直的方向移动的,即如果你把控件旋转了,那么上下左右就不是传统的上下左右,而是斜着的上下左右。

(4)transform可以实现上下左右旋转缩放等效果,但它是相对于一个位置而言的,如果相对位置不变,则相当于只生效一次,而如果每次都把改变后的位置重新设置为新的相对位置,则每次都会生效。即代码中,有两种方法。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    //创建一个btn,里面是图像
    UIButton *btnImg=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnImg.frame=CGRectMake(130, 120, 100, 100);
    //如果是.png的图像,可以省略.png后缀
    [btnImg setBackgroundImage:[UIImage imageNamed:@"hi"] forState:UIControlStateNormal];
    //增加一个tag,用于后续获取这个btnImg
    btnImg.tag=1;
    [self.view addSubview:btnImg];

    //创建上下左右、左右旋转、放大缩小按钮
    UIButton *btnUp=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnUp.frame=CGRectMake(80, 400, 20, 20);
    [btnUp setTitle:@"上" forState:UIControlStateNormal];
    [btnUp addTarget:self action:@selector(up) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnUp];

    UIButton *btnDown=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnDown.frame=CGRectMake(80, 460, 20, 20);
    [btnDown setTitle:@"下" forState:UIControlStateNormal];
    [btnDown addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnDown];

    UIButton *btnLeft=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnLeft.frame=CGRectMake(50, 430, 20, 20);
    [btnLeft setTitle:@"左" forState:UIControlStateNormal];
    [btnLeft addTarget:self action:@selector(left) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnLeft];

    UIButton *btnRight=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnRight.frame=CGRectMake(110, 430, 20, 20);
    [btnRight setTitle:@"右" forState:UIControlStateNormal];
    [btnRight addTarget:self action:@selector(right) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnRight];

    UIButton *btnRoLeft=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnRoLeft.frame=CGRectMake(150, 430, 40, 20);
    [btnRoLeft setTitle:@"左转" forState:UIControlStateNormal];
    [btnRoLeft addTarget:self action:@selector(roLeft) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnRoLeft];

    UIButton *btnRoRight=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnRoRight.frame=CGRectMake(200, 430, 40, 20);
    [btnRoRight setTitle:@"右转" forState:UIControlStateNormal];
    [btnRoRight addTarget:self action:@selector(roRight) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnRoRight];

    UIButton *btnBig=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnBig.frame=CGRectMake(250, 430, 40, 20);
    [btnBig setTitle:@"放大" forState:UIControlStateNormal];
    [btnBig addTarget:self action:@selector(big) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnBig];

    UIButton *btnSmall=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnSmall.frame=CGRectMake(300, 430, 40, 20);
    [btnSmall setTitle:@"缩小" forState:UIControlStateNormal];
    [btnSmall addTarget:self action:@selector(small) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnSmall];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

//只有一个按钮的时候,就没必要传递这个按钮参数过来
-(void)up{
    //用viewWithTag获取UIView对象,如果我们知道具体是哪种UIView,可以强制转换一下
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    //以下语句是向上移动10,但按钮只生效一次,因为它相当于赋值ty=-10,且它的移动只相对于最原始位置,所以相对于的那个原始位置不变,而且ty=-10不变,则不再移动
    //要么每次点击按钮改变ty的值,要么用不断改变它相对于的位置,即把最新的位置设置为它的相对于的位置
    //btnImg1.transform=CGAffineTransformMakeTranslation(0, -10);
    btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 0, -10);
}
-(void)down{
    //同理,如下
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 0, 10);
}
-(void)left{
    //同理,如下
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, -10, 0);
}
-(void)right{
    //同理,如下
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    btnImg1.transform=CGAffineTransformTranslate(btnImg1.transform, 10, 0);
}
-(void)roLeft{
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    //同样,第一句只能点击生效1次,且用的是弧度制的数字,pi/4
    //btnImg1.transform=CGAffineTransformMakeRotation(-M_PI_4);
    btnImg1.transform=CGAffineTransformRotate(btnImg1.transform, -M_PI_4);
}
-(void)roRight{
    //同理
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    btnImg1.transform=CGAffineTransformRotate(btnImg1.transform, M_PI_4);
}
-(void)big{
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    //同样,第一句只能点击生效1次,且用的是弧度制的数字,pi/4
    //btnImg1.transform=CGAffineTransformMakeScale(1.2, 1.2);
    btnImg1.transform=CGAffineTransformScale(btnImg1.transform, 1.2, 1.2);
}
-(void)small{
    //同理
    UIButton *btnImg1=(UIButton *)[self.view viewWithTag:1];
    btnImg1.transform=CGAffineTransformScale(btnImg1.transform, 0.8, 0.8);
}

@end

结果:

时间: 2024-08-12 06:22:21

【iOS开发-43】万能的transform注意事项,以及viewWithTag以及.png后缀可以省略的一些知识的相关文章

iOS开发——UI篇OC&transform详解

transframe属性详解 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建“基于控件初始位置”的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建“基于transform参数”的形变 CGAffineTra

iOS 开发之动画篇 - Transform和KeyFrame动画

序言 追求美好是人的天性,这是猿们无法避免的.我们总是追求更为酷炫的实现,如果足够仔细,我们不难发现一个好的动画通过步骤分解后本质上不过是一个个简单的动画实现,正是这些基本的动画在经过合理的搭配组合后化腐朽为神奇,令人惊艳.因此,掌握最基本的动画是完成酷炫开发之旅的根本. 作为动画篇的第二篇文章,我在从UIView动画说起简单介绍了关于UIView的几种基本动画,这几种动画的搭配让我们的登录界面富有灵性生动,但是这几种动画总是无法满足我们对于动画的需求.同样的,本文将从一个小demo开始讲解强大

【iOS开发-99】POST四种数据提交方式以及NSURLSession上传任务的一些知识

(1)POST四种数据提交方式 --Content-Type:application/x-www-form-urlencoded,提交的数据格式就是key1=value1&key2=value2的方式. NSURL *url=nil; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f]; NSString *str=[NSString st

iOS开发多线程在实际项目中的运用

实际项目开发中为了能够给用户更好的体验,有些延时操作我们都会放在子线程中进行. 今天我们就来聊聊多线程在实际项目中的运用. 我们先来看看多线程的基础知识: 1.多线程的原理: 同一时间,CPU只能处理一条线程,也就是只有一条线程在工作.所谓多线程并发(同时)执行, 其实是CPU快速的在多线程之间调度(切换).如果CPU调度线程的时间足够快,就造成了多线程并 发执行的假象. 2.在实际项目开发中并不是线程越多越好,如果开了大量的线程,会消耗大量的CPU资源,CPU会 被累死,所以一般手机只开1~3

iOS开发>学无止境 - 沙盒和文件操作(汇总)

关于沙盒和文件操作的文章写了几篇,在写的过程中加深了自己的记忆.今天来做一下汇总,算是对知识点的梳理. 文章梳理 1 iOS开发之沙盒机制(SandBox) 这是一篇关于沙盒的基础知识教程.简述沙盒的作用,对Documents.Library.tmp之间的区别做了介绍.通过两种方法打开沙盒,查看其中的内容. 2 iOS开发之获取沙盒路径 沙盒里的文件夹包括Documents.Library.tmp.文章介绍了如何获取Documents.Library.Caches.tmp的路径. 3 如何查看真

iOS开发之沙盒和文件操作(汇总)

关于沙盒和文件操作的文章写了几篇,在写的过程中加深了自己的记忆.今天来做一下汇总,算是对知识点的梳理. 文章梳理 1 iOS开发之沙盒机制(SandBox) 这是一篇关于沙盒的基础知识教程.简述沙盒的作用,对Documents.Library.tmp之间的区别做了介绍.通过两种方法打开沙盒,查看其中的内容. 2 iOS开发之获取沙盒路径 沙盒里的文件夹包括Documents.Library.tmp.文章介绍了如何获取Documents.Library.Caches.tmp的路径. 3 如何查看真

iOS开发基础知识--碎片43

iOS开发基础知识--碎片43  iOS开发基础知识--碎片43 1:增加手势进行左划效果,针对视图并修改其中一个的坐标,菜单用隐藏跟显示 @property(strong,nonatomic)UISwipeGestureRecognizer *recognizer; self.recognizer = [[ UISwipeGestureRecognizer alloc ] initWithTarget:self action:@selector (handleSwipeFrom:)]; [se

iOS开发项目篇—43子控件的细节处理

iOS开发项目篇—43子控件的细节处理 一.升级UI 把之前的UI图片删除,换上新的图片(图片命名一致,规范)没有其他的影响. 删除之后,添加. 替换之后,做一次clear操作. 建议把沙盒中的包删除,删除之后再做一次clear操作. 二.调整转发(模块) 1.设置背景(使用提供的素材图片进行平铺) 为转发微博部分设置背景,考虑到这个部分整体上是一个UIView,可以尝试以下设置. 第一种尝试: 但是这样设置,因为图片是平铺的,所以整个背景会出现线条效果,影响显示,不可行. 第二种尝试: 注意:

iOS开发UI篇----UI基础之Transform

1 // 平移 2 - (IBAction)trasnlate:(id)sender { 3 // 一次性的移动10 的距离 4 // _button.transform = CGAffineTransformMakeTranslation(10, 0); 5 6 // 如果想要持续移动,那么就需要得到当前view的transform 7 // 1. 获取当前button的transform属性 8 CGAffineTransform transform = _button.transform;