go go go wensday
10-15-星期四
1、“讨论组”的界面{创建讨论组、获取用户讨论组}
2、在“关注”以及“粉丝”栏,push一个界面。设置“关注的headview”
10-16-星期五
1、获取用户的讨论组信息—?
2、响应“创建”。&
3、“创建讨论组”双标题,响应“下一步”。&
10-17-星期六
1、“我的简介”push进入后即开始编辑。& 2、“讨论组”管理编辑
学习:hit-test
学习:tableviewcell 的删除以及放置图片集
10-19-星期一
讨论组的管理页面:
1、在cell中有间距排列头像----collectionview
2、navigationbar的标题------被选中的讨论组的名称+群组人数
PhotoLocations----向右滑动cell即可出现红色删除按钮,访问以及编辑图库
10-20 星期二
使用新的工程,模拟实现排列 image显示、增加、删除的界面
《TouTable副本》文件
10-21 星期三
1、“我”的界面上个人头像右上角处的身份标识修改
2、排列显示头像,将header view中的view与控制分离
10-22 星期四
1、自定义View主要是通过重载drawRect这个方法,来改变view的外观
2、自定义的view通过协议的方式,通知变更。
push一个view controller中的view为透明时,出现延时。
分辨率是指在单位面积内有多少象素
pixel—px:象素就是指相成图象的最小的一个单位,一般我们都把他比喻成一个点
10-23 星期五
1、添加讨论组详情页面的CELL设置项
UIAlertView 、UIAlertController
10-26 星期一
1、创建讨论组的第一步,拉人--->第二步,讨论组命名----然后完成。
2、生成新的cell
10-27 星期二
1、新的cell迟钝了---??---完成时,要保存需要增加的东西
2、讨论组详情的布局完善----匹配
10-28 星期三
1、讨论组名称更改后,更新保存
2、UIAlertController,一个不可子类化,私化的视图层
因为是IOS9 之后的东西,所以自定义一个AlertView
3、图片尺寸更改
4、block
10-29 星期四
1、简介完成后,返回上一个页面
2、删除聊天记录点击后,出现弹窗
3、完成讨论组的名称的更改后,更新bar的标题以及相应的地方
10-30 星期五
1、KVC
10-31 星期六
1、do table
11-02 星期一
1、SEL
2、selectedBackgroundView
3、[cell performSelector:@selector(setSelectedTextColor:) withObject:[UIColor redColor]];
4、UITapGestureRecognizer
[labelForCell addGestureRecognizer:gesture];
- (void)labelAction:(UITapGestureRecognizer *)sender
{ UILabel *label = (UILabel *)sender.view;}
5、UISwitch——是否跟想象中的不一样
11-03 星期二
1、mark uiswitch的开关状态,在复用cell 的时候获取其状态。
switchForCell.on = [state boolValue];
2、NSNumber *switchNumber = [NSNumber numberWithBool:switchForCell.on];
NSNumber *state = [switchState objectForKey:key];
3、[switchState setObject:state forKey:key];
4、UISwitch属于UIControl
5、删除tablecell有两种方式:数组/indexpath
6、uitabelcell 复用时,Identifier一定得注意!
11-04 星期三
1、重新tableview中做过的操作
11-05 星期四
1、@encode接收数据类型的名称,生成合适的字符串
2、NSNumber是NSValue的子类
包装数值地址:[NSValue valueWithBytes:&rect objCType:@encode(CGRect)];
3、[vava getValue: &get];--get获得NSValue对象vava的值
4、深拷贝:复制引用对象本身,创建一个新的内存资源
浅拷贝:只复制指向对象的指针,不复制对象本身,没有创建一个新的内存地址
5、
11-06 星期五
1、NSFileManager允许对文件进行操作,创建、删除、移动、获取
fm =[NSFileManager defaultManager]创建一个属于我们自己的NSFileManager对象
2、NSString *home = [@"~" stringByExpandingTildeInPath];
将路径中的代字符扩展成用户主目录(~)或指定用户的主目录(~user)
3、NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:home];
4、深底遍历:递归枚举它的内容[fm enumeratorAtPath: home];
浅度遍历:不递归枚举文件夹中的内容 [fm directoryContentsAtPath: home];
11-09 星期一
1、UINavigationController下的setToolbarHidden默认为隐藏
2、initWithNavigationBarClass?
3、Smart Label 就是不可编辑的UITextView,UITextView 上的dataDetectorTypes属性可以识别URL、手机号、邮箱地址等
4、stringByAppendingPathComponent,如果有必要加分隔符,会在添加之前,自动加上。
11-10 星期二
1、设置UITextView:区域、文本字体颜色、背景颜色、文本键盘的类型、委托对象设置
2、autoresizingMask自动调整子控件与父控件中间的位置,宽高
3、[UIView animateWithDuration:0.3 animations:^{
self.placeText.alpha = 0.0;
[textView becomeFirstResponder];
} completion:^(BOOL finished){
}]; 动画效果1
4、[UIView beginAnimations:@"feedbackview" context:nil];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
self.placeText.alpha = 0.0;
[textView becomeFirstResponder];
[UIView commitAnimations]; 动画效果2
11-11 星期三
1、一个新的界面:
tableDelegate、设置新界面的标题、左右键、内容
2、设置一个UITableView:区域、委托、数据源、分割方式、背景颜色、加入父视图
一个UITableViewCell的内容填充:每一个cell的行高、行宽、identifier、cell style、cell background view、有无附加视图accessoryView、行的分割符、填充文本内容。
3、NSDateFormatter可设置dateStyle、timeStyle,然后根据设置的方式从NSDate中输出字符串。
4、NSDate--dateWithTimeIntervalSinceReferenceDate
创建并返回一个NSDate对象,象设置为:
从UTC2001年1月1日00:00:00
5、NSLocale--initWithLocaleIdentifier
[datePicker setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"zh_Hans_CN"]];
6、[dateFormatter setLocale:usLocale];
11-16 星期一
设置--免打扰--UIPickerView
在函数的问题上多次跌倒:参数、返回值
每天的小幸福是种种的关怀,体贴,惊喜
sel:将方法包装成相应的方法地址,以便调用方法。
SEL s1 = @selector(test1); // 将test1方法包装成SEL对象
SEL s2 = NSSelectorFromString(@"test1"); // 将一个字符串方法转换成为SEL对象
NSString *str = NSStringFromSelector(@selector(test));
//将SEL对象转换为NSString对象
[p performSelector:@selector(test)]; //调用对象p的test方法
1、navigationcontroller 上导航条按钮的跳转
通过一个数组:navigationcontroller.viewcontrollers
2、clipsToBounds:把子视图超出父视图的那部份隐藏起来,针对父视图设置。
当取值为YES时,剪裁超出父视图范围的子视图部分;当取值为NO时,不剪裁子视图。默认值为NO。
3、响应触摸事件:分发给触摸事件发生的那个视图上----hit-test视图
查找这一视图的过程就叫做hit-testing
检测一个触摸事件是否发生在相应视图对象的边界之内(即视图的frame属性,这也是为什么子视图如果在父视图的frame之外时,是无法响应事件的)。如果在,则会递归检测其所有的子视图。包含触摸点的视图层次架构中最底层的视图就是hit-test视图。在检测出hit-test视图后,系统就将事件发送给这个视图来进行处理。
A包含{B、C}--C包含{D、E}
1. 点击事件发生在视图A的边界内,所以检测子视图B和C;
2. 点击事件不在视图B的边界内,但在视图C的边界范围内,所以检测子图片D和E;
3. 点击事件不在视图D的边界内,但在视图E的边界范围内;
视图E是包含触摸点的视图层次架构中最底层的视图(倒树结构),所以它就是hit-test视图。
hit-test视图可以最先去处理触摸事件,如果hit-test视图不能处理事件,则事件会沿着响应链往上传递,直到找到能处理它的视图。
*如果View的同级别Subview中有重叠的部分,则优先检查顶部的Subview,如果顶部的Subview返回nil, 再检查底部的Subview
*子视图如果在父视图的frame之外时,是无法响应事件的
当一个View收到hitTest消息时,会调用自己的pointInside:withEvent:方法,如果pointInside返回YES,则表明触摸事件发生在我自己内部,则会遍历自己的所有Subview去寻找最小单位(没有任何子view)的UIView,如果当前View.userInteractionEnabled = NO,enabled=NO(UIControl),或者alpha<=0.01, hidden等情况的时候,hitTest就不会调用自己的pointInside了,直接返回nil,然后系统就回去遍历兄弟节点。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
//递归调用 -pointInside:withEvent:.
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
// default returns YES if point is in bounds
3、cancelsTouchesInView为YES,表示当Gesture Recognizers识别到手势后,会向hit-test view发送 touchesCancelled:withEvent:消息来取消hit-test view对此触摸序列的处理,这样只有Gesture Recognizers能响应此触摸序列,hit-test view不再响应。如果为NO,则不发送touchesCancelled:withEvent:消息给hit-test view,这样会使Gesture Recognizers和hit-test view同时响应触摸序列。