ios7新特性--17

介绍
回到10看一下,通过创建导航栏控制器渐隐转换效果,我们是如何创建自定义控制器转换的。视图控制器交互转换添加了另一个维度,允许转换时交互式控制,通常使用手势。
今天学一下如何为模态视图控制器创建交互转换,类似卡片翻转。当用户拖动卡片翻转时,会跟随手指进行动画。
翻转动画
交互转换需要自定义动画,因此我们需要创建一个自定义动画,类似于创建渐隐效果的动画。我们需要符合
1 UIViewControllerAnimatedTransitioning协议的对象:
2 @interface SCFlipAnimation : NSObject <UIViewControllerAnimatedTransitioning>
3 @property (nonatomic, assign) BOOL dismissal;
4 @end

我们定义了一个属性dismissal,用来标识卡片翻转方向。
像之前我们需要实现下面两个方法:
01 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
02 {
03     // Get the respective view controllers
04     UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
05     UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
06  
07     // Get the views
08     UIView *containerView = [transitionContext containerView];
09     UIView *fromView = fromVC.view;
10     UIView *toView = toVC.view;
11  
12     // Add the toView to the container
13     [containerView addSubview:toView];
14  
15     // Set the frames
16     CGRect initialFrame = [transitionContext initialFrameForViewController:fromVC];
17     fromView.frame = initialFrame;
18     toView.frame = initialFrame;
19  
20     // Start building the transform - 3D so need perspective
21     CATransform3D transform = CATransform3DIdentity;
22     transform.m34 = -1/CGRectGetHeight(initialFrame);
23     containerView.layer.sublayerTransform = transform;
24  
25     CGFloat direction = self.dismissal ? -1.0 : 1.0;
26  
27     toView.layer.transform = CATransform3DMakeRotation(-direction * M_PI_2, 1, 0, 0);
28     [UIView animateKeyframesWithDuration:[self transitionDuration:transitionContext]
29                                    delay:0.0
30                                  options:0
31                               animations:^{
32                                   // First half is rotating in
33             [UIView addKeyframeWithRelativeStartTime:0.0
34                                     relativeDuration:0.5
35                                           animations:^{
36         fromView.layer.transform = CATransform3DMakeRotation(direction * M_PI_2, 1, 0, 0);
37                                           }];
38             [UIView addKeyframeWithRelativeStartTime:0.5
39                                     relativeDuration:0.5
40                                           animations:^{
41         toView.layer.transform = CATransform3DMakeRotation(0, 1, 0, 0);
42                                           }];
43                               } completion:^(BOOL finished) {
44                                   [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
45                               }];
46 }
47  
48 - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
49 {
50     return 1.0;
51 }

animation方法看起来很复杂,但是它只是用了UIView新的键帧动画,在day11中已经看过了。需要注意的就是dismissal属性决定将要旋转的方向。更多的细节可以看一下day10和day11。
现在我们已经有了一个动画对象,需要把它关联到视图控制器转换中。我们创建了一个包含两个控制器的storyboard。第一个控制器包含一个按钮,点击时弹出一个模态控制器。第二个控制器包含一个按钮,点击时通过下面方法消失这个模态控制器:
1 - (IBAction)handleDismissPressed:(id)sender {
2     [self dismissViewControllerAnimated:YES completion:NULL];
3 }

如果现在启动app,我们能看到在弹出和消失模态控制器时的标准转换动画,但是我们的兴趣不是使用传统的动画,让我们添加自己定义的转换动画:

在day10我们控制了导航栏控制器转换的动画,所以实现了UINavigationControllerDelegate协议。这里我们控制模态视图控制器的转换,所以要实现UIViewControllerTransitioningDelegate协议。两个协议方法类似,但是现在我们需要下面两个方法areanimationControllerForPresentedController:presentingController:sourceController:和animationControllerForDismissedController:。
我们在主要的控制器中实现这些方法,并返回上面创建的动画对象:
01 @interface SCViewController () <UIViewControllerTransitioningDelegate> {
02     SCFlipAnimation *_flipAnimation;
03 }
04 @end
05  
06 @implementation SCViewController
07  
08 - (void)viewDidLoad
09 {
10     [super viewDidLoad];
11     // Do any additional setup after loading the view, typically from a nib.
12     _flipAnimation = [SCFlipAnimation new];
13 }
14  
15 - (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
16 {
17     _flipAnimation.dismissal = NO;
18     return _flipAnimation;
19 }
20  
21 - (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
22 {
23     _flipAnimation.dismissal = YES;
24     return _flipAnimation;
25 }

注意在‘present’和‘dismiss’方法中对dismissal属性的设置,它决定翻转的方向。剩下就是在合适的视图控制器上设置自己作为转换代理。由于我们谈论的是弹出和消失一个视图控制器,而且这些方法都涉及视图控制器,所以代理必须设置为这个控制器。因为模态视图控制在storyboard流程中创建的,我们需要实现这个方法prepareForSegue:sender::
1 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
2 {
3     if([segue.destinationViewController isKindOfClass:[SCModalViewController class]]) {
4         // Set the delegate
5         SCModalViewController *vc = (SCModalViewController *)segue.destinationViewController;
6         vc.transitioningDelegate = self;
7     }
8 }

如果现在运行应用,你应该可以看到我们自定义的垂直卡片翻转动画已经替换开始默认的滑动动画。


转换交互
在UIViewControllerTransitioningDelegate协议中有两个方法来支持转换交互的,两个方法都返回一个支持UIViewControllerInteractiveTransitioning协议的对象。我们可以提前创建实现这个协议的对象,但是苹果已经提供了一个类UIPercentDrivenInteractiveTransition,它包含大多数用例。
一个交互器(符合UIViewControllerInteractiveTransitioning协议的对象)的概念是它控制动画(符合UIViewControllerAnimatedTransitioning协议的对象)的流程。UIPercentDrivenInteractiveTransition类提供一个方法能定义当前动画进度的百分比,以及取消动画和完成动画。
一旦我们理解我们的项目,这个部分将变得非常清晰了。我们想创建一个拖动手势,用户可以垂直拖动,来控制弹出和消失模态视图控制器。我将创建UIPercentDrivenInteractiveTransition的子类,有下列属性:
1 @interface SCFlipAnimationInteractor : UIPercentDrivenInteractiveTransition
2  
3 @property (nonatomic, strong, readonly) UIPanGestureRecognizer *gestureRecogniser;
4 @property (nonatomic, assign, readonly) BOOL interactionInProgress;
5 @property (nonatomic, weak) UIViewController<SCInteractiveTransitionViewControllerDelegate> *presentingVC;
6  
7 @end

手势识别器像我们已经讨论过的一样,我们也提供了一个属性方法来标识交互是否在处理中,以及最后一个属性来指示当前弹出的控制器。后面会看到为什么我们需要这些属性,现在我们需要看一下它需要实现的一个简单的协议:
1 @protocol SCInteractiveTransitionViewControllerDelegate <NSObject>
2 - (void)proceedToNextViewController;
3 @end

这个子类的实现:
01 @interface SCFlipAnimationInteractor ()
02 @property (nonatomic, strong, readwrite) UIPanGestureRecognizer *gestureRecogniser;
03 @property (nonatomic, assign, readwrite) BOOL interactionInProgress;
04 @end
05  
06 @implementation SCFlipAnimationInteractor
07 - (instancetype)init
08 {
09     self = [super init];
10     if (self) {
11         self.gestureRecogniser = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
12     }
13     return self;
14 }
15 @end

首先我们需要重定义2个内部可读写的属性,并在构造时间创建手势识别器并设置目标方法。注意现在我们不会把它绑定到任何一个视图上,我们已经把它设置为属性了,所以可以在外面设置。
手势目的方法如下:
01 - (void)handlePan:(UIPanGestureRecognizer *)pgr
02 {
03     CGPoint translation = [pgr translationInView:pgr.view];
04     CGFloat percentage  = fabs(translation.y / CGRectGetHeight(pgr.view.bounds));
05     switch (pgr.state) {
06         case UIGestureRecognizerStateBegan:
07             self.interactionInProgress = YES;
08             [self.presentingVC proceedToNextViewController];
09             break;
10  
11         case UIGestureRecognizerStateChanged: {
12             [self updateInteractiveTransition:percentage];
13             break;
14         }
15  
16         case UIGestureRecognizerStateEnded:
17             if(percentage < 0.5) {
18                 [self cancelInteractiveTransition];
19             else {
20                 [self finishInteractiveTransition];
21             }
22             self.interactionInProgress = NO;
23             break;
24  
25         case UIGestureRecognizerStateCancelled:
26             [self cancelInteractiveTransition];
27             self.interactionInProgress = NO;
28  
29         default:
30             break;
31     }
32 }

这是一个相当标准的手势方法,有每一个手势状态的处理事件。开始切换前我们计算了动画完成百分比,也就是说,给出手势已经滑动的长度,我们考虑转换将如何完成。然后转换如下:
1、        Began。这里我们设置交互正在当前处理流程中,并且使用我们已经添加到presentingViewController的方法开始转换。着重注意,我们使用手势开始转换的。交互器现在没有使用,只用了手势处理。因为现在还没有转换发生。一旦当我们在视图控制器中调用了这个方法(我们要正确实现),转换将会开始,并且交互器也将开始它的工作。
2、        Changed。现在我们一定在交互转换的过程中(因为当手势开始时我们已经开始了一个),因此我们仅仅调用这个被子类提供的方法,方法定义了我们的转换如何完成updateInteractiveTransition:。它将设置当前转换按动画指定的比例完成。
3、        Ended。当手势结束时,我们需要决定现在是完成转换还是取消转换。如果百分比低于0.5,我们调用子类提供的帮助方法取消转换(cancelInteractiveTransition),否则就结束的转换(finishInteractiveTransition)。我们也需要更新属性in-progress,因为转换已经结束了。
4、        Canceled。如果手势被取消,我们应该取消转换并更新属性interactionInProgress 。
在交互器中需要的代码已经全部完成,剩下的就是把所有的代码串起来。在开始控制器里面的协议
1 UIViewControllerTransitioningDelegate:
2 - (id<UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id<UIViewControllerAnimatedTransitioning>)animator { return_animationInteractor.interactionInProgress ? _animationInteractor : nil; } - (id<UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id<UIViewControllerAnimatedTransitioning>)animator { return_animationInteractor.interactionInProgress ? _animationInteractor : nil; }

这些方法都是相同的(弹出和消失)。如果我们正在执行一个交互转换,我们仅仅想返回一个交互器,也就是说,如果用户是点击按钮而不是拖动屏幕,我们应该执行一个没有交互的转换。这就是交互器中属性interactionInProgress 的目的。这里我们返回ivar_animationInteractor ,它是在viewDidLoad中设置的:
1 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib._animationInteractor = [SCFlipAnimationInteractor new]; _flipAnimation = [SCFlipAnimation new]; }

当我们在交互器中创建手势识别器时,实际上并没有添加到view上,而在视图控制器的viewDidAppear中添加的:
1 - (void)viewDidAppear:(BOOL)animated { // Add the gesture recogniser to the window first render timeif (![self.view.window.gestureRecognizers containsObject:_animationInteractor.gestureRecogniser]) { [self.view.window addGestureRecognizer:_animationInteractor.gestureRecogniser]; } }

一般我们是把手势添加到view上,但这里我们添加到了window对象上。这是因为当动画发生时,视图控制器将会移动,因此手势识别器不会像预料中那样执行。添加到window上可以保证它的行为与我们期待的一样。如果我们执行一个导航栏控制的转换,我们应该把它添加到导航栏控制器的view上。手势识别器在ViewDidAppear:中添加,因为在这时window对象才设置正确:

最后一个难题是设置交互器的属性presentingVC。为了实现设置,控制器需要实现
1 SCInteractiveTransitionViewControllerDelegate协议。在我们主控制器这非常简单:
2 @interface SCViewController () <SCInteractiveTransitionViewControllerDelegate, UIViewControllerTransitioningDelegate> {SCFlipAnimationInteractor *_animationInteractor; SCFlipAnimation *_flipAnimation; } @end#pragma mark - SCInteractiveTransitionViewControllerDelegate methods - (void)proceedToNextViewController { [self performSegueWithIdentifier:@"displayModal"sender:self]; }

现在我们已经实现了协议中需要的方法,我们可以在ViewDidAppear中设置交互器的属性,这样可以保证在基础控制器被展现的时候正确设置,不管它是第一次展现还是当模态视图消失时:
1 - (void)viewDidAppear:(BOOL)animated { ... // Set the recipeint of the interactor_animationInteractor.presentingVC = self; }

所以当用户开始手势时,交互器将在当前控制器调用proceedToNextViewController ,当前控制器将开始弹出模态视图,这也是我们期待的。
在模态视图控制器中去执行相同操作也是需要与交互器关联的(所以更新presentingVC属性)。
1 @interface SCModalViewController : UIViewController <SCInteractiveTransitionViewControllerDelegate> ... @property (nonatomic, weak) SCFlipAnimationInteractor *interactor; @end

在主控制器prepareForSegue:方法中设置该属性:
1 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {if([segue.destinationViewController isKindOfClass:[SCModalViewController class]]) { // Set the delegate... vc.interactor = _animationInteractor; } }

协议SCInteractiveTransitionViewControllerDelegate在proceedToNextViewController 方法中执行:
- (void)proceedToNextViewController { [self dismissViewControllerAnimated:YES completion:NULL]; }
最后,当模态视图控制器出现时,我们需要更新交互器属性,以确保下一个时间开始交互转换(也就是说,用户执行垂直拖动),它调用模态控制器的方法,不是主控制器的:
1 - (void)viewDidAppear:(BOOL)animated { // Reset which view controller should be the receipient of the// interactor's transitionself.interactor.presentingVC = self; }

这就是全部。如果你现在运行应用,并垂直拖动,你将看到模态视图控制器将跟随着你的手指转换。如果你拖动到一半多的距离,转换将完成,否则会回到初始状态。

介绍
视图交互转换可能成了一个非常复杂的话题,主要由于大量需要实现的协议,并且不太容易观察哪个控制器实现哪个协议(例如哪个控制器应该实现手势识别器?)。然而,实际上,我们通过少量的代码确实获得了非常强大的功能。我鼓励你去试着自定义一个视图控制器转换功能,但要知道,能力越大,责任越大,虽然我们现在能够定义许多怪诞的视图控制器转换方式,但也应该确保不要让用户体验过分复杂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值