iOS 中C如何调用Objective c的代码更新界面问题解决

本文介绍了在iOS应用中,如何在C代码执行耗时操作(如ffmpeg视频处理)时,通过创建C的中间层调用Objective-C方法来更新UI进度。详细阐述了创建PassLocalValueToOC头文件和实现文件的过程,以及利用SEL和performSelector方法传递当前进度到Objective-C的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为费时的处理实在c中,或许你的c库是某个库比如视频处理库ffmpeg,那么ffmpeg处理视频的时候非常耗时间,并且进度到了多少,你需要让用户知道。但是ios的界面是objective c代码。所有我们需要用c里面的代码不断返回数据给objective c,不但更新进度多少了。


下面的代码就是解决这个问题!


1、建立c的中间层。分为两个文件,PassLocalValueToOC.h 和

PassLocalValueToOC.m

这个就是为了让c调用的,然后它的方法又调用objective c的,.h文件如下:

#ifndef PassLocalValueToOC_h

#define PassLocalValueToOC_h

void passLocalValueTo(float currentProgress);


#endif /* PassLocalValueToOC_h */



那么.m文件就实现这个方法了,如下:

#include "PassLocalValueToOC.h"


void passLocalValueTo(float currentProgress){

    SEL s = NSSelectorFromString(@"updateNowProgress:");

    id myObj = [[NSClassFromString(@"PlayVideoViewController") alloc] init];

    NSString *stringFloat = [NSString stringWithFormat:@"%f",currentProgress];

    if([myObj respondsToSelector:s]) {

        

        [myObj performSelector:s withObject:stringFloat]; //注意如果有两个参数,使用两个withObject:参数;

        

    }

//    objc_msgSend(myObj, s);

}


注意这个.m文件,不要用什么import ,不要写什么PlayVideoViewController *player,然后直接[player updateNowProgress:@""]这样的。


因为编译不通过,原因为啥,我是ios新手,没时间追究了。


ok,PlayVideoViewController里面的那个方法,你应该会写。就写到这里吧!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了悟生死大事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值