美文网首页
荷月二十四 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连续帧动画/输入框/

    1、编译出现errSecInternalComponent第一个出现的报错是有SWIFT_VERSION关键字的,...

  • UIKit动画

    ios动画 1)序列帧动画是由多个动画帧按照一定的间隔时间逐帧连续播放而形成的动画ViewController.m...

  • iOS Animation创建及使用

    iOS 实现的基本动画 头尾式动画 2.block动画的方法 iOS显示关键帧动画 关键帧动画 动画的创建和使用 ...

  • 动画合集之补间动画

    前面学了帧动画:动画合集之补间动画 和帧动画不同(帧动画是通过连续播放图片来模拟动画效果),补间动画只需要开发者提...

  • iOS-动画知识梳理

    学习及实践笔记 记录iOS动画的学习及实践 目录 显示层(UIView)动画初级动画关键帧动画逐帧动画Gif动画的...

  • iOS 关键帧动画

    级别:★★☆☆☆标签:「iOS CAKeyframeAnimation」「iOS 关键帧动画」「CAKeyfram...

  • 动画播放(UIImageView)

    标签:帧动画、transform帧动画通过有序的多张图片快速的连续播放来实现动画效果 transform属性: 合...

  • Shawlaw的Android周记 2016年8月28日

    1、Android逐帧动画的实现逐帧动画,顾名思义,就是用一张张图片作为一帧帧,然后连续播放作为动画。这种动画的实...

  • css帧动画

    帧动画,让css动画以帧的形式表现出来,好像是连续的动画片那种效果。

  • 1. 控制动画

    《iOS编程》第27章 控制动画 学习笔记 基础动画 关键帧动画

网友评论

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

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