iOS开发项目总结

webview开发过程中踩到的坑;

1.webview关闭时关闭音频声音的问题;
一开始采取的时候采取@"about:blank"的方式关闭,发现在出现webview跳转后goback回来的时候加载之前的空白页,所以这个方法有局限性;
2.采用与JS交互的方法;
在页面关闭之前,直接调用JS关闭视频播放的方法,实现音频播放的关闭;
3.webview同时加载两个URl会报错,即一个页面的URL未加载完成又开始加载另外一个页面的URL,这时候webview就会报错;

音频播放控制的问题

1.音频循环播放的问题;
通过监听音频播放完成的动作,将音频的播放回拨到开始的地方;

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidPlayToEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
-(void)rerunPlayVideo{
    if (!self.player) {
        return;
    }
    CGFloat a=0;
    NSInteger dragedSeconds = floorf(a);
    CMTime dragedCMTime = CMTimeMake(dragedSeconds, 1);
    [self.player seekToTime:dragedCMTime];
    [self.player pause];
}

.倒计时结束的控制问题

1.通过GCD的方式控制倒计时;
通过计时器倒计时音频的控制,但需要处理在倒计时结束前对其它事件的处理,防止页面已经进入到其它页面了计时器还没有释放,这样常常会出现奔溃;

- (void)createTimer {
    //设置倒计时时间
    //__block 如果修饰指针时,指针相当于弱引用,指针对指向的对象不产生引用计数的影响
    __block int timeout = 60;
    dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, global);
    // 设置触发的间隔时间
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    //1.0 * NSEC_PER_SEC  代表设置定时器触发的时间间隔为1s
    //0 * NSEC_PER_SEC    代表时间允许的误差是 0s
    //block内部 如果对当前对象的强引用属性修改 应该使用__weak typeof(self)weakSelf 修饰  避免循环调用
    WS(ws);
    //设置定时器的触发事件
    dispatch_source_set_event_handler(timer, ^{
        //1. 每调用一次 时间-1s
        timeout --;
        if (timeout < 0) {
            dispatch_source_cancel(timer);
            //MRC下需要释放,这里不需要
            //   dispatch_realse(timer);
            //在主线程中对button进行修改操作
            dispatch_async(dispatch_get_main_queue(), ^{

        }else {
            //处于正在倒计时,在主线程中刷新button上的title,时间-1秒
            dispatch_async(dispatch_get_main_queue(), ^{

            });
        }
    });
    dispatch_resume(timer);
}

属性字体设置字体的间隔

1.通过NSKernAttributeName这个方法设置属性字体的间隔;

NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:allStr];
        [attStr addAttribute:NSKernAttributeName value:@9.2 range:[allStr rangeOfString:content]];

你可能感兴趣的:(iOS)