MTTransitions 1.6.6

MTTransitions 1.6.6

alexiscn维护。



 
依赖
MetalPetal>= 0
MetalPetal/Swift>= 0
 

  • alexiscn

MTTransitions

GL-Transitions的过渡端口移植到Metal。

特点

  • 多达76种过渡效果
  • 图像过渡效果
  • UIView过渡效果
  • UIViewController Push过渡效果
  • UIViewController Present过渡效果
  • 视频合成过渡效果
  • 从图像使用过渡效果创建视频
  • 从图像使用过渡效果和背景音乐创建视频

要求

  • iOS 10.0+
  • Xcode 11.0+
  • Swift 5.0+

过渡

支持以下过渡

  • MTAngularTransition
  • MTBounceTransition
  • MTBowTieHorizontalTransition
  • MTBowTieVerticalTransition
  • MTBurnTransition
  • MTButterflyWaveScrawlerTransition
  • MTCannabisleafTransition
  • MTCircleCropTransition
  • MTCircleTransition
  • MTCircleOpenTransition
  • MTColorPhaseTransition
  • MTColourDistanceTransition
  • MTCrazyParametricFunTransition
  • MTCrossZoomTransition
  • MTCrossHatchTransition
  • MTCrossWarpTransition
  • MTCubeTransition
  • MTDirectionalTransition
  • MTDirectionalWarpTransition
  • MTDirectionalWipeTransition
  • MTDisplacementTransition
  • MTDoomScreenTransition
  • MTDoorwayTransition
  • MTDreamyTransition
  • MTDreamyZoomTransition
  • MTFadeTransition
  • MTFadeColorTransition
  • MTFadegrayscaleTransition
  • MTFlyeyeTransition
  • MTGlitchDisplaceTransition
  • MTGlitchMemoriesTransition
  • MTGridFlipTransition
  • MTHeartTransition
  • MTHexagonalizeTransition
  • MTInvertedPageCurlTransition
  • MTKaleidoScopeTransition
  • MTLinearBlurTransition
  • MTLumaTransition
  • MTLuminanceMeltTransition
  • MTMorphTransition
  • MTMosaicTransition
  • MTMultiplyBlendTransition
  • MTPerlinTransition
  • MTPinwheelTransition
  • MTPixelizeTransition
  • MTPolarFunctionTransition
  • MTPolkaDotsCurtainTransition
  • MTRadialTransition
  • MTRandomSquaresTransition
  • MTRippleTransition
  • MTRotateScaleFadeTransition
  • MTSimpleZoomTransition
  • MTSquaresWireTransition
  • MTSqueezeTransition
  • MTStereoViewerTransition
  • MTSwapTransition
  • MTSwirlTransition
  • MTTangentMotionBlurTransition
  • MTTVStaticTransition
  • MTUndulatingBurnOutTransition
  • MTWaterDropTransition
  • MTWindTransition
  • MTWindowBlindsTransition
  • MTWindowSliceTransition
  • MTWipeDownTransition
  • MTWipeLeftTransition
  • MTWipeRightTransition
  • MTWipeUpTransition
  • MTZoomInCirclesTransition

安装

MTTransitions 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中。

pod MTTransitions

入门

每个转换都要求两个输入 MTIImage。图像应该是 .oriented(.downMirrored) 的。

import MTTransitions

let transition = MTBounceTransition()
transition.inputImage = <from Image>
transition.destImage = <to Image>

// animate progress from 0.0 to 1.0

imageView.image = transition.outputImage

UIView 转换

let effect = MTPerlinTransition()

MTTransition.transition(with: view, effect: effect, animations: {
    // Do your animation to your view
}) { (_) in
    // Transition completed
}

UIViewController 推送转换

class PushAViewController: UIViewController {

    private let transition = MTViewControllerTransition(transition: MTBurnTransition())
    
    // ...
}

extension PushAViewController: UINavigationControllerDelegate {
    
    func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        if operation == .push {
            return transition
        }
        return nil
    }
}

UIViewController 切换效果

class PresentAViewController: UIViewController {

    // ...
    
    let vc = PresentBViewController()
    vc.modalPresentationStyle = .fullScreen
    vc.transitioningDelegate = self
    present(vc, animated: true, completion: nil)
}

extension PresentAViewController: UIViewControllerTransitioningDelegate {
    
    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return transtion
    }
    
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return transtion
    }
}

视频切换效果

MTTransitions 也支持添加切换效果的视频合并。

  • 支持合并多个视频文件
  • 支持多种切换效果
  • 支持不同的多种渲染尺寸
  • 支持透传切换
// pick one transtion effect
let effect = MTTransition.Effect.wipeLeft
let duration = CMTimeMakeWithSeconds(2.0, preferredTimescale: 1000)
try? videoTransition.merge(clips,
                           effect: effect,
                           transitionDuration: duration) { [weak self] result in

    guard let self = self else { return }
    let playerItem = AVPlayerItem(asset: result.composition)
    playerItem.videoComposition = result.videoComposition
    
    self.player.seek(to: .zero)
    self.player.replaceCurrentItem(with: playerItem)
    self.player.play()
}

请参阅 VideoTransitionSampleViewControllerMultipleVideoTransitionsViewController 获取更多详细信息。

从图像创建视频

MTMovieMaker 支持 通过切换效果从一系列图像中创建视频。您也可以向 MTMovieMaker 传递本地音频文件的 URL 以创建背景音乐。

let fileURL = URL(fileURLWithPath: path)
movieMaker = MTMovieMaker(outputURL: fileURL)
do {
    try MTMovieMaker?.createVideo(with: images, effects: effects) { result in
        switch result {
        case .success(let url):
            print(url)
        case .failure(let error):
            print(error)
        }
    }
} catch {
    print(error)
}