《iOS 编程》7. 委托与文本输入

重读前言提到的学习方法:

设定目标一天一章,找一个安静地场所,关闭手机和电脑各种聊天和通知,读书无法多任务并行,必须集中精力。

  1. 通读整章
  2. 编写代码和调试(特别有帮助)
  3. 笔记

最终目标:

  • 必须学会 Objective-C
  • 必须掌握 Cocoa 的常用技术:视图、控制器、内存管理、代理
  • 必须掌握框架和学会查看官方文档

The 4 Most Important Skills for a Software Developer: If you can solve problems, learn things quickly, name things well and deal with people, you will have a much greater level of success in the long run than you will in specializing in any particular technology.

上面这篇文章中提到解决问题的能力很重要,因为真实的编程工作内容就是解决问题,所以习题很重要,做习题就是解决问题,这也和本书提到调试非常有帮助不谋而合,因为你在调试就是在解决问题。

发现我一直在寻求简单的道理(大道至简),习惯于归纳要旨和大纲。但是却忽略了细节,其实全局的理解和记忆也是必经之路。读书先薄再厚再薄,第二阶段最为繁长的耗时,但也是最重要的。

7.2 委托

Delegation 翻译为委托/代理

代理的前三步:

  • 视图中创建一个代理协议
  • 视图中创建一个代理的属性,其类型是代理协议
  • 视图中使用代理的属性

代理的后三步:

  • 控制器声明并完成代理协议
  • 控制器把自己作为视图的代理,通过设置代理的属性
  • 控制器实施代理的方法

7.8 中级练习:捏合-缩放

习题提示部分大不大懂。对比了英文版,翻译的不对啊。看中文翻译有出入,看英文太慢。解决方法:还是看中文版,Demo 和习题都做完了,再看一遍英文版。先精通一门语言的再说,以后学其他的就容易了。

谁让开发语言和大部分开发者都用英文呢,其实我现阶段看简单 Stack Overflow 和 Apple Document 都没有问题了,毕竟英文单词不多,也都是简单的词。希望以后能够直接看英文教材。

又是看了 BNR 论坛答案: http://forums.bignerdranch.com/viewtopic.php?f=488&t=9983

是我想复杂了,这里只是一个框架内置的协议,所以只要在
AppDelegate.m 完成后三步就行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//
// AppDelegate.m
// Hypnosister


#import "AppDelegate.h"
#import "GWHypnosisView.h"


@interface AppDelegate () <UIScrollViewDelegate> // ①

// setting property for the image view...
@property (nonatomic) GWHypnosisView *scrollHypnosisView; // ②

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Override point for customization after application launch.

CGRect screenRect = self.window.bounds;
CGRect bigRect = screenRect;
bigRect.size.width *= 2.0;
bigRect.size.height *= 2.0;


UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:screenRect];

// setting some zooming properties
scrollView.pagingEnabled = NO;
scrollView.minimumZoomScale = 0.5;
scrollView.maximumZoomScale = 6.0;
scrollView.contentSize = CGSizeMake(1280, 960);
scrollView.delegate = self;

[self.window addSubview:scrollView];

self.scrollHypnosisView = [[GWHypnosisView alloc] initWithFrame:bigRect];


[scrollView addSubview:self.scrollHypnosisView];

scrollView.contentSize = bigRect.size;

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];


return YES;
}

// ③ zooming method definition
-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.scrollHypnosisView;
}


项目代码保存在我的 GitHub: iOSProgramming4edSolutions