大佬教程收集整理的这篇文章主要介绍了ios – Animate AVPlayerLayer videoGravity属性,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@interface FHVideoPlayerView : UIView @end @interface FHVideoPlayerView + (Class)layerClass { return [AVPlayerLayer class]; } - (void)setAspectMode:(FHVideoPlayerAspectModE)aspectMode animated:(BOOL)animated { FHVideoPlayerAspectMode current = [self aspectMode]; FHVideoPlayerAspectMode final = aspectMode; NSString *fromValue; NSString *toValue; AVPlayerLayer *layer = (AVPlayerLayer *)[self layer]; switch (current) { case FHVideoPlayerAspectFill: fromValue = AVLayerVideoGravityResizeAspectFill; break; case FHVideoPlayerAspectFit: fromValue = AVLayerVideoGravityResizeAspect; break; default: break; } switch (final) { case FHVideoPlayerAspectFill: toValue = AVLayerVideoGravityResizeAspectFill; break; case FHVideoPlayerAspectFit: toValue = AVLayerVideoGravityResizeAspect; break; default: break; } if (toValue != fromvalue) { if (animated == YES) { // Manually added CABasicAnimation based on the understanding the implicit animations are disabled for CALayers that BACk a UIView CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"videoGravity"]; [layer addAnimation:animation forKey:@"animateVideoGravity"]; [CAtransaction begin]; [CAtransaction setAnimationDuration:0.333]; } [layer setVideoGravity:toValue]; if (animated == YES) { [CAtransaction commit]; } } }
当我尝试为不透明度这样的数字属性设置动画时,这很好用.但是,你会从类引用中注意到,AVPlayerLayer的videoGravity属性是一个NSString.类引用确实指出它是可动画的.
所以我的问题是:如何!?
@implementation VideoPlayerView + (Class) layerClass { return [AVPlayerLayer class]; } - (AVPlayerLayer *) playerLayer { return (AVPlayerLayer *)[self layer]; } - (NSString *) videoGravity { return self.playerLayer.videoGravity; } - (void) setVideoGravity:(NSString *)videoGravity { self.playerLayer.videoGravity = videoGravity; // Workaround a bug in iOS 5.0 float avFoundationVersion = [[[NSBundle bundleForClass:[AVPlayerLayer class]] objectForInfoDictionaryKey:(NSString *)kcfBundLeversionKey] floatValue]; if (avFoundationVersion < 292.24f) { @try { NSString *contentLayerKeyPath = [NSString StringWithFormat:@"%1$@%2$@.%3$@%2$@",@"player",[@"layer" capitalizedString],@"content"]; // playerLayer.contentLayer CALayer *contentLayer = [self.playerLayer valueForKeyPath:contentLayerKeyPath]; if ([contentLayer isKindOfClass:[CALayer class]]) [contentLayer addAnimation:[CABasicAnimation animation] forKey:@"sublayerTransform"]; } @catch (NSException *exception) { } self.bounds = self.bounds; } } @end
以上是大佬教程为你收集整理的ios – Animate AVPlayerLayer videoGravity属性全部内容,希望文章能够帮你解决ios – Animate AVPlayerLayer videoGravity属性所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。