百思不得姐第五天
上午
一:蒙板
- tabBarController:addsubViews
- Window:rootViewController
- Modal:presentViewController(rootViewController)
二:显示界面不是想要的效果
由于是使用Xib所以默认在ViewDidLoad中的frame是对应Xib的frame:(600,600)
我们如果要实现布局应该在-viewDidLayoutSubViews实现
但是如果真的要在ViewDidLoad里面实现我们可以设置成屏幕的中点
总结
自定义VIew
- ViewDidLoad添加子控件
- LayoutSubViews实现布局
控制器中
- viewDidLoad添加
- viewDidLayoutSubViews布局
三:循环创建的按钮上面显示不同的文字,如果是图片的话名字一般有规律,没有规律就喝文字一样设置
- 模型或者字典:(数据多的时候)
- 数组,直接去索引
四:弹簧
- 三个值
- 苹果自带的UIView动画spring
- POP
三个值
在三个不同的值之间跳转
苹果:核心动画
POP:(poping/LearnCube/)
//Basic animations can be used to interpolate values over a specified time period. To use an ease-in ease-out animation to animate a view‘s alpha from 0.0 to 1.0 over the default duration:
1 POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha]; 2 anim.fromValue = @(0.0); 3 anim.toValue = @(1.0); 4 [view pop_addAnimation:anim forKey:@"fade"];
//Spring animations can be used to give objects a delightful bounce. In this example, we use a spring animation to animate a layer‘s bounds from its current value to (0, 0, 400, 400):
1 POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds]; 2 anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)]; 3 [layer pop_addAnimation:anim forKey:@"size"];
//Decay animations can be used to gradually slow an object to a halt. In this example, we decay a layer‘s positionX from it‘s current value and velocity 1000pts per second:
1 POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX]; 2 3 anim.velocity = @(1000.); 4 5 [layer pop_addAnimation:anim forKey:@"slide"];
后面两种常见方法总结
如果你和我一样时动画迷那么你可以看看这些:
|
|
五:按钮尽管尺寸为0,但是只要有文字就会显示一个黑色的点
解决办法:
- 设置宽度为负数
- 按钮的x值在屏幕外
六:媒体时间的使用,虽然他本身是一个浮点类型,但是不能直接设置浮点值,这样会没有效果,所以我们应该使用,媒体时间对应的方法
七:关于switch中case注意点:C语言语法
八:空的block如果被调用就会报坏内存访问
所以就需要判断
九:dismis(销毁)控制器之后又拿到控制器来model或者push就会出现严重的bug,这个时候我们应该直接拿到window来操作
十:宏的定义后面对应的值一般加括号
下午
十一:取消ScrollView自动调整
XIb中
十二:textView显示占位文字
1:drawRect
2:使用并且设置label属性
十三:文字(字典)对应的值为空,
十四:UItextView和UITextField总结
十五:导航栏主题设置
十六:常见(刷新)方法总结
十七:判断文本框是否有文字
十八:Bounds总结
bounds的x和y事可以改的,如果是正数那就会往外面移,如果是负数就会往里面移。
- 等于偏移量:值相同,意义一样
- 类似内边距:ContentInset(取反)
- 注:(一直都是以内容左上角为0,0)
bounds以“内容左上角”位置为参照取边框左上角的位置
如下,bounds对应的x,y分别是-20,-64
- 在导航栏应用中有这样一个结论
当我们使用导航栏的时候,系统会从子控件中取出第一个,判断如果是scrollView就会下移64就是内边距(contentInset),如果不是就不会调整
但是有一个需要注意的:如果有超过一个scrollView的时候设置self.automaticallyAdjustsScrollViewInsets设置为NO,然后根据需要去调整scrollView的inset
如果没有导航栏就只会调整20的边距(状态栏的大小)
scrollView的属性总结
- contentInset:内容的边距
- contentSize滚动范围,内容的尺寸(可能有些我们看不见,但是任然存在)
- frame:以父控件内容左上角为原点去矩形框的位置
- frame:以自己内容左上角为原点去矩形框的位置
- contentOffset:偏移量,内容左上角和矩形框左上角的差值(bounds.origin)
注意:automaticallyAdjustsScrollViewInsets:控制器的属性
晚上
使用UItextView实现占位文字(类QQ空间发布动态界面)完整封装实现。
关于实现方式上面已经说到,这里只实现绘图的方法
Objective-C
头文件的声明
1 #import <UIKit/UIKit.h> 2 3 @interface iCocosPlaceholderDrawTextView : UITextView 4 /** 占位文字 */ 5 @property (nonatomic, copy) NSString *placeholder; 6 /** 占位文字颜色 */ 7 @property (nonatomic, strong) UIColor *placeholderColor; 8 @end
实现文件
1 #import "iCocosPlaceholderDrawTextView.h" 2 3 @implementation iCocosPlaceholderDrawTextView 4 5 - (instancetype)initWithFrame:(CGRect)frame 6 { 7 if (self = [super initWithFrame:frame]) { 8 // 设置默认字体 9 self.font = [UIFont systemFontOfSize:15]; 10 11 // 设置默认颜色 12 self.placeholderColor = [UIColor grayColor]; 13 14 [self becomeFirstResponder]; 15 16 // 使用通知监听文字改变 17 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextViewTextDidChangeNotification object:self]; 18 } 19 return self; 20 } 21 22 - (void)textDidChange:(NSNotification *)note 23 { 24 // 会重新调用drawRect:方法 25 [self setNeedsDisplay]; 26 } 27 28 - (void)dealloc 29 { 30 [[NSNotificationCenter defaultCenter] removeObserver:self]; 31 } 32 33 /** 34 * 每次调用drawRect:方法,都会将以前画的东西清除掉 35 */ 36 - (void)drawRect:(CGRect)rect 37 { 38 // 如果有文字,就直接返回,不需要画占位文字 39 // if (self.text.length || self.attributedText.length) return; 40 if (self.hasText) return; 41 42 // 属性 43 NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; 44 attrs[NSFontAttributeName] = self.font; 45 attrs[NSForegroundColorAttributeName] = self.placeholderColor; 46 47 // 画文字 48 rect.origin.x = 5; 49 rect.origin.y = 8; 50 rect.size.width -= 2 * rect.origin.x; 51 [self.placeholder drawInRect:rect withAttributes:attrs]; 52 } 53 54 - (void)layoutSubviews 55 { 56 [super layoutSubviews]; 57 58 [self setNeedsDisplay]; 59 } 60 61 #pragma mark - setter 62 - (void)setPlaceholder:(NSString *)placeholder 63 { 64 _placeholder = [placeholder copy]; 65 66 [self setNeedsDisplay]; 67 } 68 69 - (void)setPlaceholderColor:(UIColor *)placeholderColor 70 { 71 _placeholderColor = placeholderColor; 72 73 [self setNeedsDisplay]; 74 } 75 76 - (void)setFont:(UIFont *)font 77 { 78 [super setFont:font]; 79 80 [self setNeedsDisplay]; 81 } 82 83 - (void)setText:(NSString *)text 84 { 85 [super setText:text]; 86 87 [self setNeedsDisplay]; 88 } 89 90 - (void)setAttributedText:(NSAttributedString *)attributedText 91 { 92 [super setAttributedText:attributedText]; 93 94 [self setNeedsDisplay]; 95 }
Swift实现
1 import UIKit 2 3 class iCocosPlaceholderDrawTextView: UITextView { 4 5 var placeholder: String? { 6 didSet { 7 self.placeholderLabel.text = placeholder 8 self.placeholderLabel.sizeToFit() 9 } 10 } 11 var placeholderColor: UIColor? { 12 didSet { 13 self.placeholderLabel.textColor = placeholderColor 14 } 15 } 16 17 var placeholderLabel: UILabel = UILabel() 18 19 20 override init(frame: CGRect, textContainer: NSTextContainer?) { 21 super.init(frame: CGRect(), textContainer: NSTextContainer?()) 22 23 placeholderLabel.numberOfLines = 0 24 self.addSubview(placeholderLabel) 25 26 self.font = UIFont.systemFontOfSize(15) 27 28 self.placeholderColor = UIColor.grayColor() 29 30 NSNotificationCenter.defaultCenter().addObserver(self, selector: "textDidChange", name: UITextViewTextDidChangeNotification, object: self) 31 } 32 33 34 35 required init(coder aDecoder: NSCoder) { 36 fatalError("init(coder:) has not been implemented") 37 } 38 39 func textDidChange() { 40 self.placeholderLabel.hidden = self.hasText() 41 } 42 43 deinit { 44 NSNotificationCenter.defaultCenter().removeObserver(self) 45 } 46 47 override func layoutSubviews() { 48 super.layoutSubviews() 49 50 self.placeholderLabel.frame.origin.x = 5 51 self.placeholderLabel.frame.origin.y = 8 52 self.placeholderLabel.frame.size.width = self.frame.size.width - 2 * self.placeholderLabel.frame.origin.x 53 54 self.placeholderLabel.sizeToFit() 55 } 56 57 58 // - (void)setFont:(UIFont *)font 59 // { 60 // [super setFont:font]; 61 // 62 // self.placeholderLabel.font = font; 63 // [self.placeholderLabel sizeToFit]; 64 // // [self setNeedsLayout]; 65 // } 66 // 67 // - (void)setText:(NSString *)text 68 // { 69 // [super setText:text]; 70 // 71 // self.placeholderLabel.hidden = self.hasText; 72 // } 73 // 74 // - (void)setAttributedText:(NSAttributedString *)attributedText 75 // { 76 // [super setAttributedText:attributedText]; 77 // 78 // self.placeholderLabel.hidden = self.hasText; 79 // } 80 81 }