我将在Objective-C应用程序中使用Swift类。我成功地将swift类集成到我的应用程序中,我也可以访问该类,但是Swift类没有返回值
使用此库
https://github.com/ytakzk/Fusuma
从图库中选择图像时的问题应该返回图像,但不是
这是一个代码:
@IBAction func doneButtonPressed(sender: UIButton) {
let view = albumView.imageCropView
UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0)
let context = UIGraphicsGetCurrentContext()
CGContextTranslateCTM(context, -albumView.imageCropView.contentOffset.x, -albumView.imageCropView.contentOffset.y)
view.layer.renderInContext(context!)
let image : UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
print(image)
delegate?.fusumaImageSelected(image)
self.dismissViewControllerAnimated(true, completion: {
self.delegate?.fusumaDismissedWithImage?(image)
})
}
相同的代码在Swift应用程序中运行良好。
答案 0 :(得分:0)
好,然后让我们先解释一下为什么它不能与Objective-C一起使用,而只能与Swift一起使用,问题是该框架的构建仅与Swift兼容,而到目前为止还不能用于Objective-C,这意味着委托是例如,没有显示在Objective-C框架的标题中。
针对您的应用,有一种变通方法,让我们开始将库添加为Pod,使用Xcode 9.4.1在Build设置(对于框架)中将Swift Language设置为4.1:
use_frameworks!
pod 'Fusuma', :git => 'https://github.com/ytakzk/Fusuma.git', :branch => 'master'
现在创建一个名为FusumaExtention.swift
的Swift文件,并在其中添加以下代码,请注意,如果是第一次添加Swift文件,它将要求您在Xcode中创建标题,然后说是,ViewController是您的Objective-C类:
import UIKit
import Fusuma
extension ViewController:FusumaDelegate {
public func fusumaImageSelected(_ image: UIImage, source: FusumaMode) {
// pass the selected image to your view controller method
self.fusumaImageSelected(image)
}
public func fusumaMultipleImageSelected(_ images: [UIImage], source: FusumaMode) {
}
public func fusumaVideoCompleted(withFileURL fileURL: URL) {
}
public func fusumaCameraRollUnauthorized() {
}
func setDelegateToSelf(FusumaVC:FusumaViewController){
FusumaVC.delegate = self
}
}
现在,您可能会发现一个编译器错误,表明它找不到您的Objective-C类的ViewController,您需要将其导入到ProjectName-Bridging-Header.h
文件中,如下所示:
#import "ViewController.h"
现在,最后我们可以回到Objective-C类“ ViewController.h”并导入以下行:
#import <Fusuma/Fusuma-Swift.h>
#import <Fusuma/Fusuma-umbrella.h>
然后在界面内添加以下方法,如下所示,选择图像时将调用此方法:
@interface ViewController : UIViewController
-(void)fusumaImageSelected:(UIImage *)image;
@end
现在回到您的ViewController.m
并导入以下行,这使我们先前创建的扩展名可用于Objective-c,从而能够为fusuma设置委托:
#import <ProjectName-Swift.h>
然后可以说您使用以下方法从Objective-C类中进行呈现:
- (IBAction)showController:(id)sender {
FusumaViewController *fusuma = [[FusumaViewController alloc] init];
[self setDelegateToSelfWithFusumaVC:fusuma];
[self presentViewController:fusuma animated:true completion:nil];
}
然后实现我们在其下面的标头类中定义的功能,选择图像后将调用此方法:
-(void)fusumaImageSelected:(UIImage *)image{
// do what ever you want with selected image.
}
这应该有效,它已经过测试。