Swift

UIScrollView 停止滚动监测

今天需要做一个控件的动画,在scrollView滚动的时候隐藏底部一个控件,在scrollView停止滚动的时候显示底部那个控件。

该需求的“滚动隐藏”容易满足,只需要我们实现scrollView的代理:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

但“停止滚动显示”这个需求,在我尝试了所有的scrollView代理后,仍然无法满足需求。苦思之下,想到了scrollView的监听滚动代理:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

如果我们在该代理里添加一个延时定时器,在每次scrollView回调上面代理的时候,首先取消上次添加的定时任务,然后在添加一个新的定时任务,这样只要在上面的这个代理不在调用的时候,最后一个定时器,所携带的方法,就会被调用。然后就有了如下实践:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {]
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(scrollViewDidEndScrollingAnimation) object:nil];
    [self performSelector:@selector(scrollViewDidEndScrollingAnimation) withObject:nil afterDelay:0.1];
}

这样我们只要在:

- (void)scrollViewDidEndScrollingAnimation {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(scrollViewDidEndScrollingAnimation:) object:nil];
    // do something after end scrolling
}

实现停止滚动的代码就可以了。

iOS 通过URL打开APP

平常我们都看到通过APP调起另外一个APP,譬如像QQ分享等,那我们能否通过网页URL打开APP呢?当然能!下面我们就来看看如何通过网页URL打开APP。

网页链接调起APP
  • 首先我们在我们APP的Info.plist里新建一个URL Schemes.

当我们配置完上图所示的应用之后,我们就可以在浏览器里通过输入myApp://调起我们的APP了。

现在APP虽然调起了,但我们怎么知道是谁调起了我们的APP,而且你看我们在上图中还写了一个多余的参数。如果我们可以知道调起我们APP的链接就好了,这样我们就可以根据链接里的参数跳转到特定的APP页面了。需要实现这个功能,我们只需要在AppDelegate实现一个方法就行了(对于iOS10有不同的方法)。

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    //for iOS10
    NSLog(@"%@   ==   %@", url, options);
    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    //for iOS9 or older version
    NSLog(@"%@   ==   %@", url, sourceApplication);
    return YES;
}

通过上面的方法,我们就可以知道是什么浏览器,通过什么链接来调起我们的APP了。

APP调起APP

我们在另外一个APP添加如下方法:

- (void)jump:(id)sender {
    NSString *urlStr = @"myApp://teamleader.cn";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlStr]]) {
        //可以调起APP
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]];
        NSLog(@"调起成功");
    } else {
        //无法调起APP,打开AppStore
        //itms-apps://itunes.apple.com/us/app/apple-store/idMY_APP_ID
        urlStr = @"itms-apps://itunes.apple.com/cn/app/apple-store/id391945719";
        //        urlStr = @"https://itunes.apple.com/us/app/apple-store/id391945719";
        //以上两种方式都是可以的
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]];
        NSLog(@"调起失败");
    }
}

这样我们就可以让其他的APP调起我们的APP了。并且在调起APP的时候传递了参数

Demo : iOS 通过URL打开APP

喜欢就给个star鼓励下吧。

ijkplayer 编译集成笔记

ijkplayer是哔哩哔哩(Bilibili)开源的一款视频直播开源框架,对于网络推流,视频播放有很好的稳定性和良好的性能表现。这里主要记录下自己编译集成ijkplayer的使用体验。

环境配置:

Mac OS X 10.11.5

1. 准备工作

安装homebrew:MAC OSX上必备的软件包管理工具,有了它之后可以很方便的安装开发套件。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
2. 下载ijkplayer

首先我们在当前目录创建一个目录用来存放ijkplayer相关文件

mkdir ijkplayer
cd ijkplayer

然后我们将ijkplayer克隆到本地,输入以下命令:

//克隆ijkplayer到本地
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
//进入ijkplayer-ios
cd ijkplayer-ios
//切换分支
git checkout -B latest k0.6.0
//下载ffmpeg和相关脚本
./init-ios.sh

cd ios
//clean
./compile-ffmpeg.sh clean
//编译
./compile-ffmpeg.sh all

编译成功截图

完成以上步骤,我们已经离成功不远了。

打开刚刚编译的文件夹

open .

我们就可以看到ijkplayer给我们准备的demo程序,小试身手一下吧。

ijkplayer ios项目集成(图文详细版)