美文网首页
荷月二十四 iOS小记 【编译报错/ImgV连续帧动画/输入框/

荷月二十四 iOS小记 【编译报错/ImgV连续帧动画/输入框/

作者: 不不不不同学 | 来源:发表于2019-06-24 13:30 被阅读0次

    1、编译出现errSecInternalComponent
    第一个出现的报错是有SWIFT_VERSION关键字的,之后通过添加SWIFT_VERSION以及对应版本号就解决了。

    看Xcode报错内容,一直说是某个库签名失败,就有点不解了,其他库都可以签名正确,怎么就偏偏这个库签名失败,听误导人的。很容易就陷进去研究这个库究竟有没有导入正确。

    查了文章,说是Provision profile的问题,刚好这台电脑是之前一位同事用的,我去到目录~/Library/MobileDevice/Provisioning Profiles,将一些过期的profile文件删除了,然后重启电脑,就可以了。不重启电脑还是会报错的。

    顺便还清理了/Users/denny/Library/Developer/Xcode/DerivedData/

    所有问题都解决之后,发现运行起来会崩溃,报错
    dyld: Library not loaded: @rpath/libswiftCore.dylib
    奇怪了,这个问题一般是动态库没有加载才报错的。而这个库我是pod进来的,按道理来说,应该自动处理了动态库的加载才对,不需要手动在Embed中添加。

    排查了很久也没有用,最终,是同事帮忙,发现原因是Xcode中
    TARGETS -> Build Phases -> Copy Pods Resources,打了勾,这个打钩是排查前两个问题的时候打的,最后也没有取消掉,才导致此动态库加载错误的问题。

    2、信号量
    使用的代码记录一下,否则总是忘记

    dispatch_semaphore_create(long value); // 创建信号量
    dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout); // 等待信号量
    dispatch_semaphore_signal(dispatch_semaphore_t deem); // 释放信号量
    

    记住:
    (1)等待 和 释放,是要对等的
    (2)要用全局变量持有信号量对象

    3、UIImageView加载连续帧动画

                NSMutableArray * imgArr = [NSMutableArray array];
                for (int i = 1; i <= 60; i++) {
                    NSString * imgName = [NSString stringWithFormat:@"sound00%02d.png",i];
                    UIImage * img = [self playerSkinImage:imgName];
                    if (img != nil) {
                        [imgArr addObject:img];
                    }
                }
                self.imgArr = imgArr;
                self.animationImgV.animationImages = imgArr;
                self.animationImgV.animationDuration = 3.5;
                [self.animationImgV startAnimating];
    

    有一个问题就是,因为我需要加载60张图片,所以这个过程很耗时,因为我放在异步线程去加载,加载完了再回到主线程。这样主线程就不会被卡住了。

    4、格式化打印

    // 补0,比如007
     [NSString stringWithFormat:@"%02d",hour];
    
    // 保留小数位
    [NSString stringWithFormat:@"%.2f",hour];
    

    5、输入框添加左边距、右边距

            _textF.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 16, 0)];
            _textF.leftViewMode = UITextFieldViewModeAlways;
            _textF.rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 16, 0)];
            _textF.rightViewMode = UITextFieldViewModeAlways;
    

    修改光标颜色

            _textF.tintColor = [UIColor whiteColor];
    

    6、监听输入框字符变化

    [_textF addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
    
    
    - (void)textFieldDidChange{
        
        NSString *toBeString = _textF.text;
        
        //获取高亮部分
        UITextRange *selectedRange = [_textF markedTextRange];
        UITextPosition *position = [_textF positionFromPosition:selectedRange.start offset:0];
        
        //没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position){
            
            if (toBeString.length > MAX_STARWORDS_LENGTH){
                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
                if (rangeIndex.length == 1){
                    _textF.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
                }else{
                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
                    _textF.text = [toBeString substringWithRange:rangeRange];
                }
            }
        
        }
    }
    

    7、iOS系统实际上也有提供一些图标给开发者使用,只是一般不关注并且很少合适使用。参考文章 iOS 系统和自定义图标规格

    还有个疑问需要验证下,tabBar不知道是否可以通过tintColor来直接修改图标颜色。而不需要重新出图标。

    8、webview监听网页内点击跳转

    // 遵循协议
    webView.delegate=self;
    
    // 实现方法
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
       // 获取到即将要跳转的链接地址
        NSString *url=request.URL.absoluteString;
        // 判断是否符合
        if ([url isEqualToString:xxx]) {
            return NO;
        }
        return YES;  
    }
    

    其中,navigationType可以让你得知这个跳转的来源是什么,比如是用户点击网页内而出发的跳转的,还是直接代码调用调用触发的跳转。

    UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
    UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
    UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
    UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
    UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
    UIWebViewNavigationTypeOther,发生其它行为。
    

    还有一种方式我没怎么试,先记录下来

    [_webView addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:nil];
    
    - (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{
        NSLog(@"url == %@",self.webView.URL.absoluteString);
    }
    

    9、突然想起,貌似可通过event来判断button的点击事件是否是由用户触发的,还是代码调用触发的。可试一下。

    相关文章

      网友评论

          本文标题:荷月二十四 iOS小记 【编译报错/ImgV连续帧动画/输入框/

          本文链接:https://www.haomeiwen.com/subject/mksnqctx.html