MemojiView

Platform Swift 5.0 iOS 13.0+ MIT



Banner

由于没有官方 API 可以使用用户的 Memoji,我构建了一个简单的视图来检索它们并根据你的喜好使用它们。

MemojiView 的工作原理是在用于用户输入的实际 View 后面设置一个 TextView。传入的字符串被转换为图像并显示在视图中。这可能也会导致用户输入的字符或表情符号也被转换为图像。你可以选择遵守代理并显示警告,如果用户选择了 Memoji 以外的任何内容,或者简单地接受任何类型的输入。

📖 文档

快速开始


preview1                               preview2
MemojiView
let memojiView = MemojiView(frame: .zero)
memojiView.tintColor = .purple

self.view.addSubview(memojiView)   
图像类型

MemojiView 有 3 种类型的图像。

enum MemojiImageType: Equatable {
    case memoji
    case emoji
    case text(Int)
}
代理

要响应图像的变化,请在你的类(例如 View Controller)中实现 MemojiViewDelegate 协议,然后设置视图的 delegate 属性

class MyViewController: UIViewController, MemojiViewDelegate {
  override func viewDidLoad() {
    super.viewDidLoad()

    let memojiView = MemojiView(frame: .zero)
    memojiView.delegate = self
  }

  // MemojiView delegate
 func didUpdateImage(image: UIImage?, type: ImageType) {
    // Do something with the image or check the type of the image and respond accordingly.
 }
}

或者使用 Closure 来处理图像

memojiView.onChange = { image, imageType in
    // Do something on image change   
}
创建你自己的

你可以继承 MemojiView 来添加或覆盖子视图。例如,替换默认的 UIImageView

class CustomMemojiView: MemojiView {
    override func setupUI() {
        let customLabel = UILabel()
        customLabel.text = "Custom Memoji View"
        customLabel.textAlignment = .center
        customLabel.translatesAutoresizingMaskIntoConstraints = false
        addSubview(customLabel)

        NSLayoutConstraint.activate([
            customLabel.centerXAnchor.constraint(equalTo: centerXAnchor),
            customLabel.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -10)
        ])
    }
}

演示

demo.gif
文本输入

如前所述,我们无法真正控制键盘,因此无法控制用户的输入。简单地更改键盘类型会导致不同的结果。使用默认字符键盘也会将它们转换为图像。

demo_text.gif

Apple 没有提供以编程方式强制使用表情符号键盘的官方方法。但是,您可以检测用户何时更改键盘类型并做出相应反应。如果您想在表情符号键盘失去焦点时(如果用户切换回另一种输入模式)采取操作,这将特别有用。以下示例演示了如何监听键盘输入模式更改并仅在输入模式更改时做出反应

NotificationCenter.default.addObserver(
    self,
    selector: #selector(inputModeDidChange),
    name: UITextInputMode.currentInputModeDidChangeNotification,
    object: nil
)

@objc func inputModeDidChange(_ notification: Notification) {
    // Attempt to retrieve the new input mode
    guard let currentInputMode = notification.userInfo?["UITextInputFromInputModeKey"] as? UITextInputMode else {
        print("Unable to detect the current input mode.")
        return
    }

    switch currentInputMode.primaryLanguage {
    case "emoji":
        print("Emoji keyboard was active! Handle accordingly.")
    default:
        print("Keyboard type changed to: \(currentInputMode.primaryLanguage ?? "unknown")")
    }
}

SwiftUI 支持

从 iOS 13 开始,MemojiView 通过 MemojiViewRepresentable 提供对 SwiftUI 的支持。 这使您可以将 MemojiView 集成到您的 SwiftUI 项目中。

用法 (iOS 13+)

import SwiftUI
import MemojiView

struct ContentView: View {
    @State private var displayedImage: UIImage?
    @State private var displayedType: MemojiImageType?

    var body: some View {
        VStack(spacing: 20) {
            Text("Memoji Editor").font(.headline)

            MemojiViewRepresentable(
                image: $displayedImage,
                memojiType: $displayedType,
                isEditable: .constant(true),
                maxLetters: 10,
                textColor: .blue
            ) { updatedImage, updatedType in
                print("Updated image: \(updatedImage?.description ?? "nil")")
                print("Updated type: \(updatedType)")
            }
            .frame(height: 200)
            .border(Color.gray, width: 1)
        }
        .padding()
    }
}

用法 (iOS 12)

对于以 iOS 12 为目标的项目,目前 SwiftUI-Support 不可用。 但是,您可以创建一个类似于 MemojiViewRepresentable 的 UIKit 兼容包装器。 您可以依赖闭包来处理更新,而不是使用绑定。

要求

安装

Swift Package Manager

要使用 Swift Package Manager 将 MemojiView 集成到您的项目中,请将以下内容添加到您的 Package.swift 文件中

dependencies: [
    .package(url: "https://github.com/emrearmagan/ModalKit.git", from: "0.0.2")
]
CocoaPods

⚠️注意
CocoaPods 支持已在 0.0.4 版本中删除。在此之前,将不存在支持。强烈建议使用 SPM。

您可以通过将 MemojiView 添加到您的 Podfile 中来使用 CocoaPods 安装 MemojiView

pod 'MemojiView'
手动安装 MemojiView
  1. 从上次发布中下载 MemojiView.zip 并将其内容解压缩到您的项目文件夹中。
  2. 从 Xcode 项目中,从“文件”菜单中选择“添加文件到…”并添加解压缩的文件。

贡献

非常感谢您的贡献! 要提交一个

  1. Fork
  2. 将更改提交到你的 fork 中的一个分支
  3. 推送你的代码并发出 pull request