ASMediaFocusManager 允许您通过简单的点击来聚焦任何缩略图图像或视频。缩略图图像会自动动成一个聚焦的全屏图像视图或视频播放器。再次点击“完成”按钮,图像会缩小(或去聚焦)回到其初始位置。
每个缩略图像视图可能有自己的转换,聚焦和去聚焦动画会处理任何初始转换。
适用于 iPhone 和 iPad。
如果媒体是视频(支持的扩展名为 "mp4" 和 "mov"),则显示视频播放器。视频播放器带有自己的控件,包括播放/暂停按钮、滑块和时间标签。还有刮擦功能,归功于 ASBPlayerScrubbing。
聚焦视图会自动适应屏幕方向,即使您的主要视图控制器仅为纵向。
由于 iOS 5 上的方向管理不同,因此此类不适用于 iOS 5 及以下(尽管应该不难进行适配)。
目前,仅支持 UIViewContentModeScaleAspectFit
和 UIViewContentModeScaleAspectFill
,但这些模式是最广泛使用的。
对于 UIViewContentModeScaleAspectFill
,视图会扩展以显示整个图像。
如果您想支持其他内容模式,请与我联系。您甚至可以尝试发送 pull request,这将非常受欢迎!
聚焦时,即使图像的分辨率小于屏幕分辨率,图像也会在全屏显示。在这种情况下,不可用交互式缩放。
支持所有图像大小。
请参阅包含的示例,以了解如何轻松地将 ASMediaFocusManager
集成到您的项目中。
要构建此示例,您需要首先从 Example
目录运行 pod install
。
将 ASMediaFocusManager
集成的首选方法是使用 Cocoapods,因为这取决于另一个 pod 来实现视频功能。在您的 Podfile 中添加 pod 'ASMediaFocusManager'
。
您还可以将整个 ASMediaFocusManager
文件夹及其 ASBPlayerScrubbing
复制到您的项目中。
然后在您的项目中
ASMediaFocusManager
ASMediasFocusDelegate
。代理主要返回媒体URL、媒体标题和父视图控制器。[ASMediaFocusManager installOnViews:]
声明你希望可以获取焦点的所有视图。在你的视图控制器中,如果某些图像视图需要焦点功能,添加以下代码。
- (void)viewDidLoad
{
[super viewDidLoad];
self.mediaFocusManager = [[ASMediaFocusManager alloc] init];
self.mediaFocusManager.delegate = self;
// Tells which views need to be focusable. You can put your image views in an array and give it to the focus manager.
[self.mediaFocusManager installOnViews:self.imageViews];
}
以下是一个代理实现的示例。请根据你的上下文调整代码。
- (void)viewDidLoad
{
...
self.mediaNames = @[@"1f.jpg", @"2f.jpg", @"3f.mp4", @"4f.jpg"];
...
}
#pragma mark - ASMediasFocusDelegate
// Returns the view controller in which the focus controller is going to be added.
// This can be any view controller, full screen or not.
- (UIViewController *)parentViewControllerForMediaFocusManager:(ASMediaFocusManager *)mediaFocusManager
{
return self.parentViewController;
}
// Returns the URL where the media (image or video) is stored. The URL may be local (file://) or distant (http://).
- (NSURL *)mediaFocusManager:(ASMediaFocusManager *)mediaFocusManager mediaURLForView:(UIView *)view
{
NSInteger index;
NSString *name;
NSURL *url;
// Here, medias are accessed through their name stored in self.mediaNames
index = [self.imageViews indexOfObject:view];
name = self.mediaNames[index];
url = [[NSBundle mainBundle] URLForResource:name withExtension:nil];
return url;
}
// Returns the title for this media view. Return nil if you don't want any title to appear.
- (NSString *)mediaFocusManager:(ASMediaFocusManager *)mediaFocusManager titleForView:(UIView *)view
{
return @"My title";
}
如果你想编程式地对视图进行聚焦或失焦,可以在视图是可聚焦的条件下调用startFocusingView
()或endFocusing
。
[self.mediaFocusManager startFocusingView:mediaView];
@property (nonatomic, assign) NSTimeInterval animationDuration;
动画持续时间。默认为0.5。
@property (nonatomic, strong) UIColor *backgroundColor;
背景颜色。默认为透明黑色。
@property (nonatomic, assign) BOOL defocusOnVerticalSwipe;
启用垂直滑动失焦。默认为YES。
@property (nonatomic, assign) BOOL elasticAnimation;
返回动画是否有弹性效果。默认为YES。
@property (nonatomic, assign) BOOL zoomEnabled;
返回是否在全屏图像上启用缩放。默认为YES。
@property (nonatomic, assign) BOOL gestureDisabledDuringZooming;
返回是否在缩放时禁用手势。默认为YES。
@property (nonatomic, assign) BOOL isDefocusingWithTap;
返回是否通过在视图上单击来启用失焦。默认为NO。
@property (nonatomic, assign) BOOL addPlayIconOnVideo;
返回是否自动将播放图标添加到视频缩略图上。默认为YES。
@property (nonatomic, strong) UIImage *playImage;
用于显示视频缩略图播放图标的图片。默认为nil(使用内部图片)。
@property (nonatomic, strong) UIViewController *topAccessoryController;
用于显示自定义附件的控制器。如果没有指定则使用带有简单关闭按钮的默认控制器。
在iOS 7上,如果你想在一个视图聚焦或失焦时隐藏或显示状态栏,可以使用可选的代理方法 [ASMediaFocusManager mediaFocusManagerWillAppear:]
和 [ASMediaFocusManager mediaFocusManagerWillDisappear:]
。
以下是如何隐藏和显示状态栏的示例。由于代理方法是在动画块内调用的,因此状态栏的隐藏或显示将以动画的方式呈现。
- (void)mediaFocusManagerWillAppear:(ASMediaFocusManager *)mediaFocusManager
{
self.statusBarHidden = YES;
[self setNeedsStatusBarAppearanceUpdate];
}
- (void)mediaFocusManagerWillDisappear:(ASMediaFocusManager *)mediaFocusManager
{
self.statusBarHidden = NO;
[self setNeedsStatusBarAppearanceUpdate];
}
- (BOOL)prefersStatusBarHidden
{
return self.statusBarHidden;
}
// statusBarHidden is defined as a property.
@property (nonatomic, assign) BOOL statusBarHidden;
ASMediaFocusManager需要使用ARC。
ASMediaFocusManager在MIT许可下可用。
Philippe Converset,AutreSphere - [email protected]