IOS 点滴记录

来源:互联网 发布:粮食行业数据体系现状 编辑:程序博客网 时间:2024/06/05 19:28

1.IOS改变摄像机倍数:修改AVCaptureDevice对象的videoZoomFactor值

注:在设置前要通知AVCaptureSession对象,使用beginConfiguration方法,设置后,使用commitConfiguration方法提交。

AVCaptureSession  *session = [[AVCaptureSession alloc] init];    AVCaptureDevice *camera = [AVCaptureDevice                  defaultDeviceWithMediaType:AVMediaTypeVideo];    [session beginConfiguration];    camera.videoZoomFactor = 3.0;    [session commitConfiguration];

但是使用这种会卡屏,如果想连贯性,可以使用锁:

    NSError *error;    AVCaptureDevice *camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];    [camera lockForConfiguration:&error];    camera.videoZoomFactor = zoom;    [camera unlockForConfiguration];
这样会连贯起来,譬如通过手势缩放来改变摄像头变焦倍数。



2.BitCode

今天真机编译时,报了一个错,是bitcode的错误“(xxx.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)”

去网上查了下,是因为我引用的第三方库不支持bitcode,bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新的版本到App store上。当我们提交程序到App store上时,Xcode会将程序编译为一个中间表现形式(bitcode)。然后App store会再将这个botcode编译为可执行的64位或32位程序。它是后期便于app优化的。

当我们引用的 第三方库不支持bitcode时,两种方式:1.引用的第三方库rebulid重编译为支持bitcode的,再引用;2.当前工程改为不支持bitcode。在Build Settings 搜bitcode,将Build Options中的Enable Bitcode改为No.也就是要么让你的第三方库支持,要么target关闭bitcode支持。

另,从其他文章看到的内容:

  • iOS:bitcode是可选的。

  • watchOS:bitcode是必须的。

  • Mac OS:不支持bitcode。

注:如果开启了bitcode,在提交包时,也会有个bitcode选项

3.使用UISlider设置明亮度

- (IBAction)onBrightnessChanged:(id)sender {
    UISlider *slider = (UISlider *)sender;
    [[UIScreen mainScreen] setBrightness:slider.value];
}


4.故事板中有时设置约束为0但是显示出来,并没有贴边,是因为约束相对于margin而言,添加约束时,可以把“Constrain to margins”勾选去掉。


5.有时viewDidLoad里获取view大小时或添加CALayer大小时,view的大小是(0,0)或者小或者大,可以改在viewDidLayoutSubviews中执行,因为在viewDidAppear中页面才准备好。但是viewDidLayoutSubViews每次addSubView,重布局时都会调用,所以addSubView或addSubLayer, new等不要在这里面,否则会多次定义添加。


6.UITextField 字数限制

UITextFieldDelegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
}


7.改变UITabBarController中tabbar的高度。(不仅要改tabbar高度,还要改上面view的高度)(self为UITabBarController对象)

CGSize originSize = self.view.frame.size;
    self.tabBar.frame = CGRectMake(0, originSize.height - 40, originSize.width, 40);
    UIView *transitionView = [self.view.subviews objectAtIndex:0];
    transitionView.frame = CGRectMake(0, 0, originSize.width, originSize.height - 40);

8.代码判断设备是ipad还是iphone,[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone

9.页面添加画布后,原本故事板上面布局的subView被覆盖,可以将该subView放到最上层,[superView bringSubviewToFront:subView];

10.UITextField点击return,关闭键盘,实现UITextFieldDelegate,绑定,

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

11.UITextField和UITextView点击背景关闭键盘,实现对应Delegate,绑定,

-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [_textView resignFirstResponder];

    [_textField resignFirstResponder];

}

12.static有些细节记不清了,这里简单写下,IOS在@implementation外定义的变量都是全局变量:

①加static的只能在源文件中调用,类关闭后再次进入依然有效,其他类不能直接通过类名调用,但可以通过方法修改;

②不加static的可以在所有文件中访问,这种命名必须唯一,才能区分与其他源文件中的全局变量,否则会报错

注:全局变量只在应用启动时加载一次,nil或初期值,默认为0,生命周期和程序相同。

13.ios应用设置可通过iTunes共享documents下文件,在info.plist中添加Application supports iTunes file sharing设置为YES.(UIFileSharingEnabled)

14.sqlite 文本拼接使用“||”

0 0
原创粉丝点击