16

Objective C のコードを受け取ったので、それに機能を追加する必要があります。私はObjective Cに非常に慣れていないので、Swiftでできる限りのことをすることが私にとって非常に最適です。

これは私のSwiftファイル/クラスです:

import Foundation
import UIKit

@objc class ImageBarSize: NSObject{

  static func changeContadorImageSize(img:UIImage, newSize:CGSize) -> UIImage{
    UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
    let x:CGFloat = 0
    let y:CGFloat = 0
    img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))
    let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage;
  }
}

そして、これは私のObjective C .mファイルのコードです:

 imgBarCounter = [UIImage imageNamed:@"bar-counter-pd.png"]; 

 self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];

「セレクター 'changeContadorImageSize:newSize:' の既知のクラス メソッドがありません」というエラーが表示されます。

私はブリッジングプロセス全体を行いました。

 #import <WHS_Live_2-Swift.h>

ファイルの先頭で、すべて正常に動作しているようです。ここSOで同様のエラースレッドのように見えるものを見てきましたが、役に立ちませんでした。

4

1 に答える 1

10

この行を見ると、Swift 3 を使用しています。

img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))

Swift 3 では、最初のパラメーターも引数ラベルを持つものとして扱われます。

最初のラベルを含むすべてのパラメーターで一貫したラベル動作を確立します (SE-0046)

コマンドを押しながら をクリックすると#import <YourProjectName-Swift.h>、それらがどのように Objective-C にエクスポートされるかを確認できます。(Xcode がインデックス作成を完了するまで待つ必要がある場合があります。)

Xcode 8 ベータ 6 でテストすると、クラス メソッドは次のようになります。

+ (UIImage * _Nonnull)changeContadorImageSizeWithImg:(UIImage * _Nonnull)img newSize:(CGSize)newSize;

したがって、次のように呼び出す必要がある場合があります。

self.image = [ImageBarSize changeContadorImageSizeWithImg:imgBarCounter newSize:CGSizeMake(300, 300)];

または、Swift メソッドを次のように変更できます。

static func changeContadorImageSize(_ img:UIImage, newSize:CGSize) -> UIImage{

次に、元の形式で呼び出すことができます。

self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
于 2016-08-29T22:05:58.123 に答える