前言

	MP_EXTERN_CLASS_AVAILABLE(3_2) NS_DEPRECATED_IOS(3_2, 9_0, "Use AVPlayerViewController in AVKit.")
@interface MPMoviePlayerViewController : UIViewController @available(iOS, introduced=3.2, deprecated=9.0, message="Use AVPlayerViewController in AVKit.")
public class MPMoviePlayerViewController : UIViewController MP_EXTERN_CLASS_AVAILABLE(2_0) NS_DEPRECATED_IOS(2_0, 9_0, "Use AVPlayerViewController in AVKit.")
@interface MPMoviePlayerController : NSObject <MPMediaPlayback> @available(iOS, introduced=2.0, deprecated=9.0, message="Use AVPlayerViewController in AVKit.")
public class MPMoviePlayerController : NSObject, MPMediaPlayback
  • 视频播放:

    • 添加库文件:MediaPlayer.framework
    • 包含头文件:#import <MediaPlayer/MediaPlayer.h>

1、本地/网络视频播放

1.1 使用 MPMoviePlayerViewController 播放

  • Objective-C

    	// 添加库文件:MediaPlayer.framework
    // 包含头文件:#import <MediaPlayer/MediaPlayer.h> // 声明媒体播放控件
    @property(nonatomic, retain)MPMoviePlayerViewController *mpMoviePlayerVC; // 加载文件路径,加载本地视频
    NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]]; // 加载文件路径,加载网络视频
    NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"]; // 实例化媒体播放控件
    mpMoviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:mediaUrl]; // 弹出播放页面,开始播放
    [self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC];
  • Swift

    	// 添加库文件:MediaPlayer.framework
    // 包含头文件:import MediaPlayer // 声明媒体播放控件
    var mpMoviePlayerVC:MPMoviePlayerViewController! // 加载文件路径,加载本地视频
    let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!) // 加载文件路径,加载网络视频
    let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")! // 实例化媒体播放控件
    mpMoviePlayerVC = MPMoviePlayerViewController(contentURL: mediaUrl) // 弹出播放页面,开始播放
    self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC)

1.2 使用 MPMoviePlayerController 播放

  • Objective-C

    	// 添加库文件:MediaPlayer.framework
    // 包含头文件:#import <MediaPlayer/MediaPlayer.h> // 声明媒体播放控件
    @property(nonatomic, retain)MPMoviePlayerController *mpMoviePlayer; // 加载文件路径,加载本地视频
    NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]]; // 加载文件路径,加载网络视频
    NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"]; // 实例化媒体播放控件
    mpMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaUrl]; // 添加播放页面,开始播放
    [self.view addSubview:mpMoviePlayer.view]; // 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame
    mpMoviePlayer.fullscreen = YES;
  • Swift

    	// 添加库文件:MediaPlayer.framework
    // 包含头文件:import MediaPlayer // 声明媒体播放控件
    var mpMoviePlayer:MPMoviePlayerController! // 加载文件路径,加载本地视频
    let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!) // 加载文件路径,加载网络视频
    let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")! // 实例化媒体播放控件
    mpMoviePlayer = MPMoviePlayerController(contentURL: mediaUrl) // 添加播放页面,开始播放
    self.view.addSubview(mpMoviePlayer.view) // 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame
    mpMoviePlayer.fullscreen = true

2、本地/网络视频播放设置

2.1 使用 MPMoviePlayerViewController 播放

  • Objective-C

    	// 显示播放页面
    /*
    弹出播放页面,开始播放
    */
    [self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC]; // 开始播放
    [mpMoviePlayerVC.moviePlayer play]; // 暂停播放
    [mpMoviePlayerVC.moviePlayer pause]; // 停止播放
    /*
    停止播放会自动退出播放界面
    */
    [mpMoviePlayerVC.moviePlayer stop]; // 退出播放
    /*
    退出播放界面,停止播放
    */
    [self dismissMoviePlayerViewControllerAnimated];
  • Swift

    	// 显示播放页面
    /*
    弹出播放页面,开始播放
    */
    self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC) // 开始播放
    mpMoviePlayerVC.moviePlayer.play() // 暂停播放
    mpMoviePlayerVC.moviePlayer.pause() // 停止播放
    /*
    停止播放会自动退出播放界面
    */
    mpMoviePlayerVC.moviePlayer.stop() // 退出播放
    /*
    退出播放界面,停止播放
    */
    self.dismissMoviePlayerViewControllerAnimated()

2.2 使用 MPMoviePlayerController 播放

  • Objective-C

    	// 判断媒体是否正在通过 AirPlay 播放
    BOOL airPlayVideoActive = mpMoviePlayer.isAirPlayVideoActive; // 判断是否准备好显示
    BOOL readyForDisplay = mpMoviePlayer.readyForDisplay; // 获取播放控制器所在的视图
    /*
    The view in which the media and playback controls are displayed
    */
    UIView *playbackView = mpMoviePlayer.view; // 获取媒体播放背景视图
    /*
    A view for customization which is always displayed behind movie content
    */
    UIView *backgroundView = mpMoviePlayer.backgroundView; // 获取播放状态
    /*
    MPMoviePlaybackStateStopped, 停止
    MPMoviePlaybackStatePlaying, 播放
    MPMoviePlaybackStatePaused, 暂停
    MPMoviePlaybackStateInterrupted, 中断
    MPMoviePlaybackStateSeekingForward, 快进
    MPMoviePlaybackStateSeekingBackward 快退 Returns the current playback state of the movie player
    */
    MPMoviePlaybackState playbackState = mpMoviePlayer.playbackState; // 获取网络加载状态
    /*
    MPMovieLoadStateUnknown = 0, 状态未知
    MPMovieLoadStatePlayable = 1 << 0, 可播放
    MPMovieLoadStatePlaythroughOK = 1 << 1, Playback will be automatically started in this
    state when shouldAutoplay is YES
    MPMovieLoadStateStalled = 1 << 2, Playback will be automatically paused in this
    state, if started Returns the network load state of the movie player
    */
    MPMovieLoadState loadState = mpMoviePlayer.loadState; // 获取媒体类型
    /*
    MPMovieMediaTypeMaskNone = 0,
    MPMovieMediaTypeMaskVideo = 1 << 0,
    MPMovieMediaTypeMaskAudio = 1 << 1 The types of media in the movie, or MPMovieMediaTypeNone if not known
    */
    MPMovieMediaTypeMask movieMediaType = mpMoviePlayer.movieMediaTypes; // 获取媒体原始尺寸
    /*
    The natural size of the movie, or CGSizeZero if not known/applicable
    */
    CGSize naturalSize = mpMoviePlayer.naturalSize; // 获取媒体播放时长
    /*
    The duration of the movie, or 0.0 if not known
    */
    NSTimeInterval duration = mpMoviePlayer.duration; // 获取当前可播放的时长
    /*
    for progressively downloaded network content
    */
    NSTimeInterval playableDuration = mpMoviePlayer.playableDuration; // 设置播放页面大小
    mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200); // 缓冲视频
    /*
    即使不写,系统也会自动调用该方法
    */
    [mpMoviePlayer prepareToPlay]; // 显示播放页面
    /*
    添加播放页面,开始播放
    */
    [self.view addSubview:mpMoviePlayer.view]; // 开始播放
    [mpMoviePlayer play]; // 暂停播放
    [mpMoviePlayer pause]; // 停止播放
    [mpMoviePlayer stop]; // 设置全屏
    [mpMoviePlayer setFullscreen:YES animated:YES]; // 快进
    [mpMoviePlayer beginSeekingForward]; // 快退
    [mpMoviePlayer beginSeekingBackward]; // 停止快进或快退
    [mpMoviePlayer endSeeking]; // 设置是否全屏播放
    /*
    必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小
    */
    mpMoviePlayer.fullscreen = NO; // 设置是否自动开始播放
    /*
    默认为 YES
    */
    mpMoviePlayer.shouldAutoplay = NO; // 设置是否允许通过 AirPlay 播放
    /*
    Defaults to YES on iOS 5.0 and later
    */
    mpMoviePlayer.allowsAirPlay = NO; // 设置当前播放时间
    mpMoviePlayer.currentPlaybackTime = 10; // 设置当前播放速度
    /*
    默认为 1.0 (normal speed),设为 0.0 时暂停播放
    */
    mpMoviePlayer.currentPlaybackRate = 1.0; // 设置开始播放时间
    /*
    The start time of movie playback. Defaults to NaN, indicating the natural start time of
    the movie
    */
    mpMoviePlayer.initialPlaybackTime = 10; // 设置停止播放时间
    /*
    The end time of movie playback. Defaults to NaN, which indicates natural end time of
    the movie
    */
    mpMoviePlayer.endPlaybackTime = 20; // 设置播放控制器类型
    /*
    MPMovieControlStyleNone, 没有控制器, No controls
    MPMovieControlStyleEmbedded, 嵌入式,默认,Controls for an embedded view 可将播放窗口全屏化
    MPMovieControlStyleFullscreen, 全屏式, Controls for fullscreen playback MPMovieControlStyleDefault = MPMovieControlStyleEmbedded
    */
    mpMoviePlayer.controlStyle = MPMovieControlStyleEmbedded; // 设置重复播放模式
    /*
    MPMovieRepeatModeNone, 不重复,默认
    MPMovieRepeatModeOne 重复播放
    */
    mpMoviePlayer.repeatMode = MPMovieRepeatModeNone; // 设置画面缩放模式
    /*
    MPMovieScalingModeNone, 不做任何缩放
    MPMovieScalingModeAspectFit, 适应屏幕大小,保持宽高比,默认
    MPMovieScalingModeAspectFill, 充满屏幕,保持宽高比
    MPMovieScalingModeFill 充满屏幕,不保持宽高比
    */
    mpMoviePlayer.scalingMode = MPMovieScalingModeAspectFit; // 设置媒体资源类型
    /*
    The playback type of the movie. Defaults to MPMovieSourceTypeUnknown.
    Specifying a playback type before playing the movie can result in faster load times. MPMovieSourceTypeUnknown,
    MPMovieSourceTypeFile, Local or progressively downloaded network content
    MPMovieSourceTypeStreaming Live or on-demand streaming content
    */
    mpMoviePlayer.movieSourceType = MPMovieSourceTypeFile;
  • Swift

    	// 判断媒体是否正在通过 AirPlay 播放
    let airPlayVideoActive:Bool = mpMoviePlayer.airPlayVideoActive // 判断是否准备好显示
    let readyForDisplay:Bool = mpMoviePlayer.readyForDisplay // 获取播放控制器所在的视图
    /*
    The view in which the media and playback controls are displayed
    */
    let playbackView:UIView = mpMoviePlayer.view // 获取媒体播放背景视图
    /*
    A view for customization which is always displayed behind movie content
    */
    let backgroundView:UIView = mpMoviePlayer.backgroundView // 获取播放状态
    /*
    Stopped, 停止
    Playing, 播放
    Paused, 暂停
    Interrupted, 中断
    SeekingForward, 快进
    SeekingBackward 快退 Returns the current playback state of the movie player
    */
    let playbackState:MPMoviePlaybackState = mpMoviePlayer.playbackState // 获取网络加载状态
    /*
    Unknown = 0, 状态未知
    Playable = 1 << 0, 可播放
    PlaythroughOK = 1 << 1, Playback will be automatically started in this state when
    shouldAutoplay is YES
    Stalled = 1 << 2, Playback will be automatically paused in this state, if started Returns the network load state of the movie player
    */
    let loadState:MPMovieLoadState = mpMoviePlayer.loadState // 获取媒体类型
    /*
    MaskNone = 0,
    MaskVideo = 1 << 0,
    MaskAudio = 1 << 1 The types of media in the movie, or MPMovieMediaTypeNone if not known
    */
    let movieMediaType:MPMovieMediaTypeMask = mpMoviePlayer.movieMediaTypes // 获取媒体原始尺寸
    /*
    The natural size of the movie, or CGSizeZero if not known/applicable
    */
    let naturalSize:CGSize = mpMoviePlayer.naturalSize // 获取媒体播放时长
    /*
    The duration of the movie, or 0.0 if not known
    */
    let duration:NSTimeInterval = mpMoviePlayer.duration // 获取当前可播放的时长
    /*
    for progressively downloaded network content
    */
    let playableDuration:NSTimeInterval = mpMoviePlayer.playableDuration // 设置播放页面大小
    mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200) // 缓冲视频
    /*
    即使不写,系统也会自动调用该方法
    */
    mpMoviePlayer.prepareToPlay() // 显示播放页面
    /*
    添加播放页面,开始播放
    */
    self.view.addSubview(mpMoviePlayer.view) // 开始播放
    mpMoviePlayer.play() // 暂停播放
    mpMoviePlayer.pause() // 停止播放
    mpMoviePlayer.stop() // 设置全屏
    mpMoviePlayer.setFullscreen(true, animated: true) // 快进
    mpMoviePlayer.beginSeekingForward() // 快退
    mpMoviePlayer.beginSeekingBackward() // 停止快进或快退
    mpMoviePlayer.endSeeking() // 设置是否全屏播放
    /*
    必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小
    */
    mpMoviePlayer.fullscreen = false // 设置是否自动开始播放
    /*
    默认为 YES
    */
    mpMoviePlayer.shouldAutoplay = false // 设置是否允许通过 AirPlay 播放
    /*
    Defaults to YES on iOS 5.0 and later
    */
    mpMoviePlayer.allowsAirPlay = false // 设置当前播放时间
    mpMoviePlayer.currentPlaybackTime = 10 // 设置当前播放速度
    /*
    默认为 1.0 (normal speed),设为 0.0 时暂停播放
    */
    mpMoviePlayer.currentPlaybackRate = 1.0 // 设置开始播放时间
    /*
    The start time of movie playback. Defaults to NaN, indicating the natural start time of
    the movie
    */
    mpMoviePlayer.initialPlaybackTime = 10 // 设置停止播放时间
    /*
    The end time of movie playback. Defaults to NaN, which indicates natural end time of
    the movie
    */
    mpMoviePlayer.endPlaybackTime = 20 // 设置播放控制器类型
    /*
    None, 没有控制器, No controls
    Embedded, 嵌入式,默认,Controls for an embedded view 可将播放窗口全屏化
    Fullscreen, 全屏式, Controls for fullscreen playback
    */
    mpMoviePlayer.controlStyle = MPMovieControlStyle.Embedded // 设置重复播放模式
    /*
    None, 不重复,默认
    One 重复播放
    */
    mpMoviePlayer.repeatMode = MPMovieRepeatMode.None // 设置画面缩放模式
    /*
    None, 不做任何缩放
    AspectFit, 适应屏幕大小,保持宽高比,默认
    AspectFill, 充满屏幕,保持宽高比
    Fill 充满屏幕,不保持宽高比
    */
    mpMoviePlayer.scalingMode = MPMovieScalingMode.AspectFit // 设置媒体资源类型
    /*
    The playback type of the movie. Defaults to MPMovieSourceTypeUnknown.
    Specifying a playback type before playing the movie can result in faster load times. Unknown,
    File, Local or progressively downloaded network content
    Streaming Live or on-demand streaming content
    */
    mpMoviePlayer.movieSourceType = MPMovieSourceType.File

3、监听播放进度

	// Movie Property Notifications:媒体属性观察者

		MPMovieMediaTypesAvailableNotification   // 媒体属性可获取
MPMovieSourceTypeAvailableNotification // 媒体类型是 MPMovieSourceTypeUnknown MPMovieDurationAvailableNotification // 媒体播放时长可获取
MPMovieNaturalSizeAvailableNotification // 媒体原始尺寸可获取 // Movie Player Notifications:媒体播放观察者 MPMediaPlaybackIsPreparedToPlayDidChangeNotification // 准备播放 MPMoviePlayerPlaybackDidFinishNotification // 播放完成或退出播放 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey // NSNumber (MPMovieFinishReason) MPMoviePlayerPlaybackStateDidChangeNotification // 播放状态改变,通过程序或者用户操作改变 MPMoviePlayerScalingModeDidChangeNotification // 画面缩放模式改变 MPMoviePlayerLoadStateDidChangeNotification // 网络加载状态改变 MPMoviePlayerNowPlayingMovieDidChangeNotification // 当前播放媒体改变 MPMoviePlayerWillEnterFullscreenNotification // 将要进入全屏播放状态
MPMoviePlayerDidEnterFullscreenNotification // 已经进入全屏播放状态
MPMoviePlayerWillExitFullscreenNotification // 将要退出全屏播放状态
MPMoviePlayerDidExitFullscreenNotification // 已经退出全屏播放状态
MPMoviePlayerFullscreenAnimationDurationUserInfoKey // NSNumber of double (NSTimeInterval)
MPMoviePlayerFullscreenAnimationCurveUserInfoKey // NSNumber of NSUInteger (UIViewAnimationCurve) MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification // 开始或停止通过 AirPlay 播放 MPMoviePlayerReadyForDisplayDidChangeNotification // 准备好显示
  • Objective-C

    	// 添加系统通知观察者
    /*
    观察的状态发生改变时将会调用添加的相应方法进行处理
    */
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(playFinished)
    name:MPMoviePlayerPlaybackDidFinishNotification
    object:mpMoviePlayer]; // 观察者响应事件
    - (void)playFinished { } // 取消监听
    [[NSNotificationCenter defaultCenter] removeObserver:self
    name:MPMoviePlayerPlaybackDidFinishNotification
    object:mpMoviePlayer];
  • Swift

    	// 添加系统通知观察者
    /*
    观察的状态发生改变时将会调用添加的相应方法进行处理
    */
    NSNotificationCenter.defaultCenter().addObserver(self,
    selector: #selector(MpMoviePlayerController.playFinished),
    name: MPMoviePlayerPlaybackDidFinishNotification,
    object: mpMoviePlayer) // 观察者响应事件
    func playFinished() { } // 取消监听
    NSNotificationCenter.defaultCenter().removeObserver(self,
    name: MPMoviePlayerPlaybackDidFinishNotification,
    object: mpMoviePlayer)

iOS - MPMoviePlayer 视频播放的更多相关文章

  1. iOS开发——视频播放 待更新……

    本文主要实现调用系统自带的播放器,自带的播放器已经做好了屏幕的适配,集成播放,暂停,快进等功能.能够满足基本的视频播放功能及iOS的视频播放的开发. 最后将其简单的封装成一个iOS视频播放工具类. 一 ...

  2. iOS AVPlayer视频播放器

    代码地址如下:http://www.demodashi.com/demo/11168.html 一.运行效果 二.实现过程 ①.创建播放器avPlayer //创建播放器 url = [url str ...

  3. ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

    ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...

  4. iOS 音视频播放

    播放控制切换为: ijkplayer wiki: https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-ijkplayer 播放控制切换为: ...

  5. 项目源码--IOS自定义视频播放器

    下载源码 技术要点: 1. 视频播放器功能的实现 2. 视频文件的扫描与管理 3. Ipad UI的实现 4.源码详细的中文注释 ……. 详细介绍: 1. 视频播放器功能的实现 源码基于MediaPl ...

  6. ios系统视频播放器MPMoviePlayerController应用遇到的坑

    最近在做视频播放时应用系统MPMoviePlayerController播放器播放视频,发现点击快进快退会出现黑屏现象,并且点击完成按钮也不会返回,代码以及界面如下所示: NSURL *url=[se ...

  7. iOS - AVPlayer 音视频播放

    前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class ...

  8. iOS 视频播放方式整理

    初衷 多媒体这整个系列的文章自己也准备好开始整理了,先从视频音频最简单也是最常用的播放出发慢慢的往下深究,探索到底层的编码解码等等,这篇文章就从视频的播放这个最简单的说起. iOS的视频播放方式有几种 ...

  9. 【原】iOS学习45之多媒体操作

    1. 音频 1> 音频实现简述 iOS 里面共有四种专门实现播放音频的方式: System Sound Services(系统声音服务) OpenAL(跨平台的开源的音频处理接口) Audio ...

随机推荐

  1. A Mysql backup script

    UseCentOS can help IT managers to get rid of the boring learning methods, quick grasp Linux technolo ...

  2. Apache Mina 入门实例

    这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...

  3. SQL编程之高级查询(子查询)以及注意事项

    SQL编程之高级查询(子查询)以及注意事项   1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...

  4. Java 如何快速序列化

    1,定义变量

  5. java从命令行接收多个数字,求和之后输出结果

    设计思想:获取输入数的个数,然后将要相加的数字转换成为浮点型进行相加,最后进行输出 源代码: package Add; import java.util.Scanner; // 严羽卿   2015. ...

  6. Piggy-Bank

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  7. hibernate的like用法(用占位符解决)

    原本我的写法:Query repeatClientQuery=querysession.createQuery("from ClientInfo as a " +"whe ...

  8. reactjs入门到实战(八)----表单组件的使用

    表单组件支持几个受用户交互影响的属性: value,用于 <input>.<textarea> 组件. checked,用于类型为 checkbox 或者 radio 的 &l ...

  9. Java提高篇---Map总结

    一.Map概述 首先先看Map的结构示意图 Map:"键值"对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. SortedMap:有序的键值对接口,继承Map接口. Na ...

  10. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...