6

Swift アプリで Objective-C ライブラリ (MWPhotoBrowser) を使用しようとしています。私の Swift クラスは、必要なメソッドを実装することで MWPhotoBrowserDelegate プロトコルに準拠しています。ただし、次のエラーが発生し続けます。

「タイプ 'PhotoLibrary' はプロトコル 'MWPhotoBrowserDelegate' に準拠していません」

Cocoa プロトコルは正常に動作しているようです。以前にこの問題に遭遇した人はいますか?

サンプルコードは次のとおりです。

class PhotoLibrary: UIImageView, MWPhotoBrowserDelegate {

    init() {
        super.init(frame: CGRectZero)
    }

    func numberOfPhotosInPhotoBrowser(photoBrowser: MWPhotoBrowser!) -> Int {
        return 0
    }

    func photoBrowser(photoBrowser: MWPhotoBrowser!, photoAtIndex index: Int) -> MWPhoto! {
        return nil
    }
}

プロトコルの定義は次のとおりです。

@protocol MWPhotoBrowserDelegate <NSObject>

- (NSInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser;
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSInteger)index;

@optional

- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index;
- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index;
- (NSString *)photoBrowser:(MWPhotoBrowser *)photoBrowser titleForPhotoAtIndex:(NSUInteger)index;
- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser didDisplayPhotoAtIndex:(NSUInteger)index;
- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index;
- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index;
- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected;
- (void)photoBrowserDidFinishModalPresentation:(MWPhotoBrowser *)photoBrowser;

@end
4

4 に答える 4

4

MWPhotoBrowser コードベースを変更する必要なく、次のコードを使用して Swift アプリで MWPhotoBrowser を動作させました。

func showFullScreenImage(image:UIImage) {
    let photo:MWPhoto = MWPhoto(image:image)

    self.photos = [photo]

    let browser:MWPhotoBrowser = MWPhotoBrowser(delegate: self)

    browser.displayActionButton = true
    browser.displayNavArrows = false
    browser.displaySelectionButtons = false
    browser.zoomPhotosToFill = true
    browser.alwaysShowControls = false
    browser.enableGrid = false
    browser.startOnGrid = false
    browser.enableSwipeToDismiss = true

    browser.setCurrentPhotoIndex(0)

    self.navigationController?.pushViewController(browser, animated: true)
}

func numberOfPhotosInPhotoBrowser(photoBrowser: MWPhotoBrowser!) -> UInt {
    return UInt(self.photos.count)
}

func photoBrowser(photoBrowser: MWPhotoBrowser!, photoAtIndex index: UInt) -> MWPhotoProtocol! {
    if Int(index) < self.photos.count {
        return photos.objectAtIndex(Int(index)) as! MWPhoto
    }
    return nil
}

func photoBrowserDidFinishModalPresentation(photoBrowser:MWPhotoBrowser) {
    self.dismissViewControllerAnimated(true, completion:nil)
}

写真をクラス var として設定private var photos = []し、アプリの Bridging-Header.h ファイルに次のインポートを追加しました。

#import <MWPhotoBrowser/MWPhoto.h>
#import <MWPhotoBrowser/MWPhotoBrowser.h>

上記のコードのほとんどはhttps://github.com/mwaterfall/MWPhotoBrowser/issues/325#issuecomment-64781477から取得しました。

于 2015-04-22T17:02:14.690 に答える
2

これが私が理解したものです:

Swift には id データ型に関する問題があります。id のすべてのインスタンスを (MWPhoto *) に置き換えるには、MWPhotoBrowser コードを変更する必要がありました。そもそもMWPhoto*を使うべきだったと思います。

これにより、不適合の問題が修正されます。

于 2014-07-30T04:56:53.710 に答える
0

xCode 7.1 - いくつかの問題が発生しましたが、動作しました。

  1. Cocoa Pods を介してインポートされます。

  2. ブリッジング ヘッダーの追加:

    #import <MWPhotoBrowser/MWPhoto.h>

    #import <MWPhotoBrowser/MWPhotoBrowser.h>

  3. ビルド設定 -> ヘッダー検索パスは、再帰的に設定された「ポッド」を追加します (ブリッジ ヘッダー エラーを修正します)

  4. Build Phases -> Link Binary with Libraries add: libMWPhotoBroswer、MediaPlayer.framework、libSDWebImage、libMBProgressHUD、libDACIrcularProgress (「symbol(s) not found for architecture x86_64」エラーを修正)

  5. Build Settings -> Other Linker Flags add '-ObjC' (SDWebImage フレームワークのエラーを修正)

それが誰かを助けることを願っています。

于 2015-12-03T20:14:55.767 に答える