ASMediaFocusManager 0.6

ASMediaFocusManager 0.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016年4月

Philippe Converset 维护。



  • 作者:
  • Philippe Converset

ASMediaFocusManager 允许您通过简单的点击来聚焦任何缩略图图像或视频。缩略图图像会自动动成一个聚焦的全屏图像视图或视频播放器。再次点击“完成”按钮,图像会缩小(或去聚焦)回到其初始位置。

每个缩略图像视图可能有自己的转换,聚焦和去聚焦动画会处理任何初始转换。

适用于 iPhone 和 iPad。

视频

如果媒体是视频(支持的扩展名为 "mp4" 和 "mov"),则显示视频播放器。视频播放器带有自己的控件,包括播放/暂停按钮、滑块和时间标签。还有刮擦功能,归功于 ASBPlayerScrubbing

方向

聚焦视图会自动适应屏幕方向,即使您的主要视图控制器仅为纵向。

由于 iOS 5 上的方向管理不同,因此此类不适用于 iOS 5 及以下(尽管应该不难进行适配)。

图像内容模式

目前,仅支持 UIViewContentModeScaleAspectFitUIViewContentModeScaleAspectFill,但这些模式是最广泛使用的。

对于 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;

待办事项

  • 允许使用你自己的视频控制视图。
  • 修复全屏图像缩放时方向变化引起的图像跳跃(仅在父ViewController支持UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown时)。
  • 在全屏下通过水平滑动进行媒体浏览。
  • 通过垂直滑动关闭焦点视图,类似于Facebook应用(部分完成,感谢@harishkashyap,2015年2月9日)。
  • 在视频缩略图上添加播放图标。(2015年4月2日)
  • 改善聚焦和失焦旋转的弹性(即自然)效果。(2015年4月1日)
  • 支持电影媒体。(2015年4月1日)
  • 当视图被缩放时隐藏附件视图(按钮和标签)。(2014年3月5日)

ARC

ASMediaFocusManager需要使用ARC。

许可

ASMediaFocusManager在MIT许可下可用。

作者

Philippe Converset,AutreSphere - [email protected]

@关注我的Twitter