博文

目前显示的是 十一月, 2015的博文

Storyboard的segue的登录跳转逻辑处理

图片
在纯代码中进行页面切换大部分情况下只需要 push modal 这种切换方式即可完成需求。 但是在Storyboard中,切换页面变成了segue,如果单纯的从按钮按住control然后连线到别的ViewController中,会导致按钮点下去就会跳转页面,无法处理登陆逻辑。 解决方法: 从源ViewController中,选择上面的这个,按住control,拖动连线到新的ViewController中,即可建立ViewController之间的segue跳转。然后设置这个segue的segue Identifier, 然后在需要跳转的按钮事件中,加入:[self performSegueWithIdentifier:@"segueXXX" sender:self]; 即可。

Storyboard把鼠标箭头放到圆点上不显示对应控件的解决方法

其实我也不知道具体是怎么解决的。。用CleanMyMac把XCode重置一下就好了。。缺点是账号啥的都要重新登录。。

隐藏NavigationBar下面的线(也许是阴影?)

首先 我们定义个属性 @property (nonatomic, strong)UIImageView *contentLineImageView; 然后写一个方法: - (UIImageView *)findHairlineImageViewUnder:(UIView *)view { if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) { return (UIImageView *)view; } for (UIView *subview in view.subviews) { UIImageView *imageView = [self findHairlineImageViewUnder:subview]; if (imageView) { return imageView; } } return nil; } //然后在viewdidload中调用这个方法 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _contentLineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar]; self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:37/255.0 green:195/255.0 blue:149/255.0alpha:1.0f]; //这句话 要写上。 默认是YES可能你得到的颜色与实际的不匹配。 默认为YES 说明是有透明度的。 self.navigationController.navigationBar.translucent = NO; } //我们还需要在viewwillappear 和view...

有关layer的CATransform3DMakeScale与frame的关系

如果先设置了父view的frame,又设置了Scale,再想用autolayout来通过frame.height约束view,需要做的是offset = frame.height/scale 这个转换,否则和预想的会出现差异(scale在捣鬼)

成员变量和属性的差别(转)

本质上来讲,属性也会帮你定义一个成员变量,并根据属性的声明自动生成getter/setter 方法,其中setter 方法根据属性(property)的属性(attribute)来提供不同的内存管理策略。 简单翻译一个SO的答案: Why would you use an ivar? ,展开说一下成员变量的好处。 封装 如果成员变量是private,程序中的其它对象很难直接访问该成员变量。如果是属性,相对更容易用父类方法读写属性。 性能 成员变量地址可以根据实例的内存地址偏移寻址。而属性的读写都需要函数调用,相对更慢。 非基础类型 对于复杂的C++类型,往往设为成员变量更合适,也许这种类型不支持copy,或者完全复制很麻烦。 多线程 多线程环境下,为保证数据一致性,在需要同步执行的代码段更应该使用成员变量。如果对需要同步更新的数据用getter/setter 方法,数据更新效率低,会带来更多的获取锁请求失败。 程序正确性 成员变量可以做直观的内存管理。属性可以一层层继承,还可以复写。容易出错。 二进制文件的体积 默认用属性,会生成不必要的getter/setter 方法,程序体积会变大。

在某ViewController强制转屏或者禁止转屏或者强制屏幕旋转方向。

这些方法都不能在subViewController中执行。 禁止/允许转屏: - (BOOL)shouldAutorotate { return YES; } 屏幕旋转方向: - (NSUInteger)supportedInterfaceOrientations { return (UIInterfaceOrientationMaskAll); }

UIPageViewController的翻页手势冲突问题。

如果用了自定义转场 或者其他的手势,并且还想用到PageViewController的手势翻页特效的话,那么手势冲突就不可避免了,目前用到的具体处理方法是重写UIPageViewController的手势接收方法。 首先,定义UIPageViewController为UIGestureRecognizerDelegate。 然后,在UIPageViewController中的ViewDidLoad里面遍历它的所有gestureRecgnizer: for (UIGestureRecognizer *gesture in self.view.gestureRecognizers) { gesture.delegate = self; } 最后,重写手势判断方法: 由于这里面有两个手势判断器,所以可以根据需要来做判断 即:  if ([gestureRecognizer isKindOfClass:[UIGestureRecognizer class]]) { 不过一般来讲,不用判断的话: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { CGPoint touchPoint = [touch locationInView:self.view]; if (touchPoint.x < self.view.frame.size.width * 0.75 && touchPoint.x > self.view.frame.size.width * 0.25 && touchPoint.y > self.view.frame.size.height * 0.2) { return NO; } else { return YES; } 这样做就够了。