绘制图形的视图方式为_三角函数图象的平移变换

绘制图形的视图方式为_三角函数图象的平移变换iOS Programming – Views(视图 – 基本绘制,变换,平移,旋转,反转,倾斜)

大家好,又见面了,我是你们的朋友全栈君。

1. Views

A view (an object whose class is UIView or a subclass of UIView) knows how to draw itself into a rectangular area of the interface.

Your app has a visible interface thanks to views.

(eg: you can drag an interface widget, such as a UIButton, into a view in the nib editor;

when the app runs, the button appears, and works properly.

You can also manipulate views in powerful ways, in real time. Your code can do some or all of the

view’s drawing of itself)

A view is also a responder (UIView is a subclass of UIResponder).

This means that a view is subject to user interactions, such as taps and swipes.

A view can have subviews;

If a view is removed from the interface, its subviews are removed;

if a view is hidden (made invisible), its subviews are hidden;

if a view is moved, its subviews move with it; and other changes in a view are likewise

shared with its subviews.

A view may come from a nib, or you can create it in code.

On balance, neither approach is to be preferred over the other; it depends on your needs and inclinations and on the

overall architecture of your app.

 

2. The Window

The top of the view hierarchy is the app’s window.

It is an instance of UIWindow (or your own subclass), which is a UIView subclass.

Your app should have exactly one main window.  It is created at launch time and is never destroyed or replaced.

It occupies the entire screen and forms the background, and is the ultimate superview of, all your other visible views.

The window must fill the device’s screen.

This is done by setting the window’s frame to the screen’s bounds as the window is instantiated.

Objective-C:

UIWindow* w = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

Swift(iOS8):

let w = UIWindow(frame: UIScreen.mainScreen().bounds)

Swift(iOS9):

// it’s sufficient to instantiate UIWindow with no frame
let w = UIWindow()

You will typically not put any view content manually and directly inside your main window.
Instead, you’ll obtain a view controller and assign it to the main window’s root ViewController property.

This causes the view controller’s main view (its view) to be made the one and only immediate subview of

your main window, which is the main window’s root view.

All other views in your main window will be subviews of the root view. Thus,

the root view is the highest object in the view hierarchy that the user will usually see.

Your app’s interface is not visible until the window, which contains it, is made the app’s
key window. This is done by calling the UIWindow instance method makeKeyAndVisible.

 

When addSubview: is called, the view is placed last among its superview’s subviews;
thus it is drawn last, meaning that it appears frontmost.

(最后绘制的,出现在最前面)

 

// it is legal to cycle through it and remove each subview one at a time
for (UIView* v in view.subviews)
    [v removeFromSuperview];

 

3. Visibility and Opacity(可见性与不透明度)

A view can be made invisible by setting its hidden property to YES, and visible again
by setting it to NO.

A view can be assigned a background color through its backgroundColor property. A
color is a UIColor;

A view whose background color is nil (the default) has a transparent background.

A view can be made partially or completely transparent through its alpha property: 1.0
means opaque, 0.0 means transparent, and a value may be anywhere between them,
inclusive.
This affects subviews: if a superview has an alpha of 0.5, none of its subviews
can have an apparent opacity of more than 0.5, because whatever alpha value they have
will be drawn relative to 0.5.
A view that is completely transparent (or very close to it) is like a view whose hidden is
YES: it is invisible, along with its subviews, and cannot (normally) be touched.

eg:

if a view displays an image and has a background color and its alpha is less than 1, the background color
will seep through the image (背景色将渗入图像).

 

4. Frame

A view’s frame property, a CGRect, is the position of its rectangle within its superview.
By default, the superview’s coordinate system will have the origin at its top left,
with the x-coordinate growing positively rightward and the y-coordinate growing positively downward.
(等同于Cocos2d-x中的UI坐标系,原点在左上角)

Setting a view’s frame to a different CGRect value repositions the view, or resizes it, or both.

例: 画3个部分重叠的视图 

Objective-C:

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(113, 111, 132, 194)];
v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];
UIView* v2 = [[UIView alloc] initWithFrame:CGRectMake(41, 56, 132, 194)];
v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];
UIView* v3 = [[UIView alloc] initWithFrame:CGRectMake(43, 197, 160, 230)];
v3.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1];
[mainview addSubview: v1];
[v1 addSubview: v2];
[mainview addSubview: v3];

Swift:

let v1 = UIView(frame:CGRectMake(113, 111, 132, 194))
v1.backgroundColor = UIColor(red: 1, green: 0.4, blue: 1, alpha: 1)
let v2 = UIView(frame:CGRectMake(41, 56, 132, 194))
v2.backgroundColor = UIColor(red: 0.5, green: 1, blue: 0, alpha: 1)
let v3 = UIView(frame:CGRectMake(43, 197, 160, 230))
v3.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1)
mainview.addSubview(v1)
v1.addSubview(v2)
mainview.addSubview(v3)

效果:

绘制图形的视图方式为_三角函数图象的平移变换

 

5. Bounds and Center(边框和中心)

CGRectInset函数,画出视图边框

例1: 画一个带有粗边框的视图

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(113, 111, 132, 194)];
v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];
UIView* v2 = [[UIView alloc] initWithFrame:CGRectInset(v1.bounds, 10, 10)];
v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];
[mainview addSubview: v1];
[v1 addSubview: v2];

效果:

绘制图形的视图方式为_三角函数图象的平移变换

 

例2: 移动超视图(spuerview)的原点导致子视图(subview)位置发生变化

       (本例中子视图向左上移动)

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(113, 111, 132, 194)];
v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];
UIView* v2 = [[UIView alloc] initWithFrame:CGRectInset(v1.bounds, 10, 10)];
v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];
[mainview addSubview: v1]
[v1 addSubview: v2];
CGRect r = v1.bounds;
r.origin.x += 10;
r.origin.y += 10;
v1.bounds = r;

效果:

绘制图形的视图方式为_三角函数图象的平移变换

 

6. Transform(变换)

旋转(rotation), 缩放(scaling), 平移(translation)

例1: 视图顺时针旋转45度角

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(113, 111, 132, 194)];
v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];
UIView* v2 = [[UIView alloc] initWithFrame:CGRectInset(v1.bounds, 10, 10)];
v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];
[mainview addSubview: v1];
[v1 addSubview: v2];
v1.transform = CGAffineTransformMakeRotation(45 * M_PI/180.0);

效果:
绘制图形的视图方式为_三角函数图象的平移变换

 

 

 

例2: 缩放变换

v1.transform = CGAffineTransformMakeScale(1.8, 1);

效果:
绘制图形的视图方式为_三角函数图象的平移变换

 

例3: 子视图先平移后旋转

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(20, 111, 132, 194)];
v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];
UIView* v2 = [[UIView alloc] initWithFrame:v1.bounds];
v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];
[mainview addSubview: v1];
[v1 addSubview: v2];
v2.transform = CGAffineTransformMakeTranslation(100, 0);
v2.transform = CGAffineTransformRotate(v2.transform, 45 * M_PI/180.0);

效果:
绘制图形的视图方式为_三角函数图象的平移变换

 

例4: 子视图先旋转后平移

v2.transform = CGAffineTransformMakeRotation(45 * M_PI/180.0);
v2.transform = CGAffineTransformTranslate(v2.transform, 100, 0);

效果:

绘制图形的视图方式为_三角函数图象的平移变换

 

 

 例5: 旋转平移后再反转(删除旋转)

CGAffineTransformConcat – 合并两个变换动作

CGAffineTransform r = CGAffineTransformMakeRotation(45 * M_PI/180.0);
CGAffineTransform t = CGAffineTransformMakeTranslation(100, 0);
v2.transform = CGAffineTransformConcat(t,r);
v2.transform =
CGAffineTransformConcat(CGAffineTransformInvert(r), v2.transform);

效果:
绘制图形的视图方式为_三角函数图象的平移变换

 

例6: 倾斜

v1.transform = CGAffineTransformMake(1, 0, -0.2, 1, 0, 0);

效果:
绘制图形的视图方式为_三角函数图象的平移变换

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107063.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【教程】Spring+Mybatis环境配置多数据源

    一、简要概述在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功能。二、代码详解2.1 DataSourceConstants 数据源常量类/** * 数据源名称常量类 * 对应 application.xml 中 bean multipleDataSo…

    2022年2月27日
    29
  • 压缩文件密码暴力破解——cRARk使用方法

    压缩文件密码暴力破解——cRARk使用方法cRARk使用方法压缩文件如果忘记密码就需要使用暴力破解的方法进行破解,因为使用了加密的手段,是无法绕过密码验证的。cRARk是一款开源的功能强大的rar,7z类压缩软件的破解工具,支持GPU加速。官网地址目前有命令行版本和windows的GUI版本。使用方法在官网下载命令行版本GUI版本注意:GUI版本必须有命令行版本下才能运行GUI使用命令行版本下载解压,提示需要输入密码,但是实际上密码为空。或者为UTF-16。(crark55.rar)然后解压GUI版本,里面只有一个可运

    2022年4月28日
    1.3K
  • DeepFakes深度造假,AI换脸的技术原理是什么?

    DeepFakes深度造假,AI换脸的技术原理是什么?DeepFakes的出现还意味着我们可以在视频中进行大规模的“换脸”。我们大多数人都曾经把自己的照片上传到网络上,因此,我们大多数人的脸都能够轻易地被替换到一些视频中,成为视频的“主角”,凭空捏造一个人根本没有干过的事。不得不说,这是件非常可怕的事情。

    2022年5月25日
    45
  • 如何反编译小程序的源码(微信小程序反编译工具)

    网易Mumu模拟器安装下载地址:http://mumu.163.com/360/ 下载完安装包后直接安装 打开模拟器安装微信、RE文件管理器设置Root权限打开RE文件管理器,提示请求超级用户访问权限,选择允许到此准备工作完成。打开微信,然后打开小程序,获取小程序编译包先打开微信 搜索微博小程序打开 打开RE文件管理 按照/data/data/com.tencent.mm/MicroMsg/80b34bca4945f…

    2022年4月18日
    53
  • MySql必知必会实战练习(四)主键、外键、sql约束、联结表

    本博将对主键、外键、MySql数据库约束和联结表的相关特性进行总结和实战1.主键表中的每一行都应该具有可以唯一标识自己的一列(或一组列),而这个承担标识作用的列称为主键如果没有主键,数据的管理

    2021年12月29日
    42
  • 小米手机抓包教程

    小米手机抓包教程小米手机抓包教程

    2022年6月20日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号