iPhone之手动切换View

用AVFoundation和SwiftUI打造iPhone相机替代App:从手动控制到批量导出 移动端相机应用开发中,系统相机往往提供完善的基础能力,但手动控制和工作流效率存在明显短板。本文从一个实际iOS项目Camera Sun出发,解析基于AVFoundation搭建拍摄管线、通过SwiftUI实现预览界面与参数面板、以及处理手动曝光、RAW支持、批量导出等关键环节的技术细节。文章首先阐述相机应用的核心原理——AVCaptureSession的会话生命周期与权限管理,然后分析手动控制对成像确定性的价值,并延伸到相册联动、SMB批量导出等工程实践。适合iOS开发者、内容创作者及产品负责人参考,帮助理 阅读详情

iPhone之手动切换View



我们之前切换View使用的方法是UINavigationController,今天我们介绍手动切换View:


切换的原理很简单:

有一个根UIViewController类,其中包含了要切换的那些View对应的ViewController,切换时先删除当前的View,然后调用 insertSubview 添加切换后的View,完成切换。




1.

首先创建一个View-based Application,名称是 Switch:





2.

如下图,新建两个UIViewController subclass,分别是 FirstViewController 和 SecondViewController:






3.

在 SwitchViewController.xib 中增加一个切换按钮:




修改 FirstViewController.xib 和 SecondViewController.xib 以区分它们即可,如下图:

FirstViewController.xib:

SecondViewController.xib:


可以在 ViewController 的 viewDidLoad 方法中调用:

self.view.backgroundColor = [UIColor yellowColor];

来改变View的背景颜色为黄色





4.

修改 SwitchViewController.h 如下:

//
//  SwitchViewController.h
//  Switch
//
//  Created by HuTao on 8/18/12.
//  Copyright __MyCompanyName__ 2012. All rights reserved.
//

#import <UIKit/UIKit.h>


@class FirstViewController;
@class SecondViewController;


@interface SwitchViewController : UIViewController
{
	FirstViewController * firstViewController;
	SecondViewController * secondViewController;
}


@property (retain, nonatomic) FirstViewController * firstViewController;
@property (retain, nonatomic) SecondViewController * secondViewController;


-(IBAction)btnSwitchView:(id)sender;


@end


修改 SwitchViewController.m 如下:

//
//  SwitchViewController.m
//  Switch
//
//  Created by HuTao on 8/18/12.
//  Copyright __MyCompanyName__ 2012. All rights reserved.
//

#import "SwitchViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"


@implementation SwitchViewController


@synthesize firstViewController;
@synthesize secondViewController;


-(IBAction)btnSwitchView:(id)sender
{
	if(self.secondViewController == nil)  
	{  
		//SecondViewController * temp = [[SecondViewController alloc] init] 也可以;                  
		SecondViewController * temp = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];                  
		self.secondViewController = temp;  
		[temp release];  
	}  

	[UIView beginAnimations:@"View Flip" context:nil];  
	[UIView setAnimationDuration:1.25];  
	[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  
	
	UIViewController * coming = nil;  
	UIViewController * going = nil;  
	UIViewAnimationTransition transition;  
	
	if (self.firstViewController.view.superview == nil)   
	{          
		coming = firstViewController;  
		going = secondViewController;  
		
		//由右到左
		transition = UIViewAnimationTransitionFlipFromRight;                  
	}  
	else  
	{  
		coming = secondViewController;  
		going = firstViewController;  
		
		//由左到右
		transition = UIViewAnimationTransitionFlipFromLeft;  
	}  
	
	[UIView setAnimationTransition:transition forView:self.view cache:YES];  
	
	[coming viewWillAppear:YES];  
	[going viewWillDisappear:YES];  
	
	[going.view removeFromSuperview];  
	[self.view insertSubview:coming.view atIndex:0];  
	
	[coming viewDidAppear:YES];  
	[going viewDidDisappear:YES];  

	//提交Animation
	[UIView commitAnimations]; 
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
	[super viewDidLoad];
	
	FirstViewController * temp = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];  
	self.firstViewController = temp;  
	[self.view insertSubview:temp.view atIndex:0];  
	[temp release]; 
}


- (void)viewDidUnload
{
	firstViewController = nil;
	secondViewController = nil;
}


- (void)dealloc
{
	[super dealloc];
	
	[firstViewController release];
	[secondViewController release];
}

@end


上面只演示了两个View相互切换,但更多的View切换的原理是相同的





5.

在Interface Builder中将 Switch 和Touch Up Inside 的回调函数连接起来




6.

运行结果如下:

切换前:



切换中:



切换后:






关于动画的部分将会在:

http://blog.youkuaiyun.com/htttw/article/details/7879535

中详细介绍。




最后我把完整的代码也上传上来了:

http://download.youkuaiyun.com/detail/htttw/4508503





完成!

解锁笔记智能对话:手把手配置 Obsidian Copilot 插件与硅基流动模型 本文详细介绍了如何为Obsidian笔记软件配置Copilot插件,并接入硅基流动AI模型,从而为个人知识库添加智能对话能力。通过手把手教程,指导用户完成插件安装、API Key获取、模型配置及索引构建,最终实现基于个人笔记内容的深度语义问答,提升知识管理效率。 阅读详情

相关推荐

前端零代码丨UIOTOS + NodeRed:无代码搭建工控上位机的绝配组合!

用户类型价值硬件产品商软硬一体方案,无代码GUI上位机成新卖点软件服务商售前原型演示利器,交付成本降低至1/3平台开发商融合无代码技术,同质化竞争中脱颖而出🚀 总结UIOTOS的前端零代码设计(页面嵌套、属性继承、节点连线)与NodeRed的后端流程自动化,堪称工控与IoT开发的黄金组合。无论是串口通信、SCADA监控还是业务管理,均能实现“无代码交付”,真正让前端不求人,硬件交互触手可及!探索更多案例:UIOTOS官网在线体验。

2502_91192798的博客 757

修改XCode默认工程为使用Xib

概述 自从XCode5开始,当创建一个带有View的iPhone项目时,默认采用了StoryBoards,本文主要是讲解如何手动修改使其切换到使用xib来布局。 修改步骤 1.先将Main.storyboard从项目中移除(也可以直接删除) 2.添加一个View的控制器,并选中使用xib,可以命名为VC 3.修改AppDelegate中的didFinishLaunchingWithOptions:...

weixin_34233856的博客 147

【CODESYS】-软件Bug与处理方法(20240710更)

【CODESYS】-软件Bug与处理方法(不定期更新)

qq_35316470的博客 5185

iPhone之手势切换图片

iPhone之手势切换图片 今天我们介绍一下iPhone手势切换图片,算是对之前的小小总结。程序功能和常用的图片浏览软件类似,手指向左划动就回卷到上一幅图片,向右划动就后卷到下一幅图片。别看功能简单,但真正实现起来还是挺麻烦的。下面开始吧: 1. 新建一个Window-based Application,名称为Switch:

htttw的专栏 4552

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试

即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。

LOVE135149的博客 5629

基于AVFoundation的iPhone自定义相机开发:从计算摄影到手动控制

计算摄影让智能相机在按下快门的瞬间完成多帧融合、智能HDR与深度优化,极大降低了普通用户的拍照门槛。但自动处理过强、参数不可控、处理流程不透明,也让专业创作者感到局限。在iOS生态中,AVFoundation是构建自定义相机的核心框架,它通过AVCaptureSession、AVCaptureDevice等组件,向开发者开放了从摄像头输入、预览输出到底层参数调节的完整管线。利用这一框架,开发者可以实现手动曝光、白平衡锁定、RAW输出、焦点控制等能力,将“系统替你决定”变成“由你决定”。这类技术实践被应用于第

weixin_30851867的博客 450

《干货满满!AI 应用架构师打造 AI 驱动生产计划的实战技巧》

生产计划是制造企业的“大脑”——它决定了买什么物料、产多少产品、用什么设备、什么时候交货,直接影响企业的成本、效率和客户满意度。需求预测靠经验,误差常超20%;排产依赖Excel,调整一次要3天;供应链协同靠邮件,物料延迟导致停产屡见不鲜。作为AI应用架构师,我们的任务是用AI重新“激活”这个“大脑”——用数据驱动的预测替代经验判断,用智能优化替代人工排产,用实时协同替代被动响应。本文结合3个制造业实战案例5段可运行代码2个数字孪生模型,从架构设计→核心模块实现→落地踩坑。

移动开发前沿的博客 1083

Iphone开发(九)理解subView,手动实现多个视图切换

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的优快云专栏,原文地址:http://blog.youkuaiyun.com/holydancer/article/details/7422365 在Iphone的视图中,其实就是一个一个view,一层view上面放一层view,一个view上面放一群view,甚至UIWindow也是一个view,在网上找了一张图片

holydancer的专栏 1万+

深入解析ZYNQ PL触发PS中断:从原理到创新实践

通过本文,您不仅学会了ZYNQ PL-PS中断的基础实现,更掌握了动态优先级调整中断负载均衡等创新技术。响应延迟降低40%以上系统吞吐量提升2-3倍功耗降低30%支持更复杂的实时应用硬件是身体的骨骼,软件是流动的血液,而中断则是连接二者的神经系统。只有精确控制每一条神经冲动,才能构建真正智能的嵌入式系统。拓展思考如何将AI决策引入中断调度?能否实现跨芯片中断同步?量子计算对中断架构的挑战?

QQ_778132974的博客 416

出现 RuntimeError: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation的解决方法

大致就是在执行主函数的训练函数中,在反向传播这一块出现了问题。解决方法就是添加如下代码块。找到提示bug的行数。

码农研究僧的博客 5532

iphone开发之适配iphone5

iphone5出来了,从不用适配的我们也要像android一样适配不同分辨率的屏幕了。   公司产品新版本需要适配iphone5,经过一番折腾算是搞定了。下面分享给大家:   iphone5的屏幕分辨率:1136 x 640 也即是高度变成了568,程序启动时我们需要一张retina图片命名为Default-568h@2x.png。在我们创建工程时xcode会默认为我们创建一个纯黑色的图片...

weixin_34311757的博客 114

一层一责,一聚合一包:DDD分层架构下的微服务代码模型、三重边界与服务数据协作

领域模型画得再清楚,落不进代码也是空谈。本文以一个可运行的客户中心微服务为线索,先对比整洁架构、六边形架构与DDD分层架构,指出三者共同守护的那条隔离核心业务的红线;再把DDD分层落成四个一级目录、以聚合为单位分包、一个聚合一个仓储的代码模型,拆解实体、聚合根、值对象、领域事件、领域服务与仓储的设计要点;随后厘清逻辑、物理、代码三重边界,并用检查器实测:干净代码零越界,拆出积分聚合时领域代码无需改动;注入九处越界后,必须先重构才能拆分。最后梳理服务调用三场景与PO、DO、DTO、VO的协作。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 177万+

适配iPhone5

转载:http://www.th7.cn/Program/IOS/201301/120310.shtml iphone5的屏幕分辨率:1136 x 640 也即是高度变成了568,程序启动时我们需要一张retina图片命名为Default-568h@2x.png。在我们创建工程时xcode会默认为我们创建一个纯黑色的图片替换即可。   最新版的xcode都已支持iphone5

Bob-IOS开发 934

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IPhone多视图切换

处理IPhone多个view切换是我们常遇到的问题,接下来有个比较实用的方法: 而且还附有创建空项目,内存告急处理和动画效果的实现! 具体步骤: 1.创建一个空的项目,然后添加一个ViewController,勾选上with xib文件,点击到xib文件看看File's Owner属性是否是当前的ViewController,如果不是,手动填写一下,并将他的view属性...

weixin_33949359的博客 82

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Iphone开发(八)利用Tabbed Application模板实现多视图切换

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的优快云专栏,原文地址:http://blog.youkuaiyun.com/holydancer/article/details/7417030 在android中我们一般用intent意图来在各个view之间跳转,在以前的ios开发中,如果要实现选项卡切换多视图,需要用到一个现在Xcode版本中没有的模板Wind

holydancer的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

XL-DocBench快速入门教程:一条命令如何在5分钟内跑通首次基准评测

XL-DocBench 是一个面向超长文档理解(Extra-Long Document Understanding)的基准评测数据集,包含 292 份真实专业文档和 1,345 道经 194 位人类专家逐条核验的问答题。它要求系统不仅"读懂"文档,还要**找到证据、组合多方支撑、适用正确规则,并知道何时该拒答**。本教程带你用一条命令、约 5 分钟的时间,完成从获取数据到跑通首次基准评测的完整流程

gitblog_00738的博客 1027

Xcode5中如何切换Storyboards为xib

在Xcode5中,当创建一个带View的iPhone项目时,默认必须使用Storyboards,不再支持切换xib的checkbox。本文讲解如何手动切换到使用xib来布局。 1,把Main.storyboard从项目中移除   2,添加xib文件到项目中。添加一个新文件,选择View,命名和*ViewContorller相同。   3,把Main storyboard对应的项从plis...

weixin_34088583的博客 103

Xcode6中如何切换storyboard为xib

在Xcode6中,当创建一个带View的iPhone项目时,默认必须使用Storyboards,不再支持切换xib的checkbox。本文讲解如何手动切换到使用xib来布局。 1,把Main.storyboard从项目中移除   2,添加xib文件到项目中。添加一个新文件,选择View,命名和*ViewContorller相同。   3,把Main storyboard对应的项从plis

tanhailong198801的专栏 583

iOS iphone5屏幕适配 autosizing

iphone5出来了,从不用适配的我们也要像android一样适配不同分辨率的屏幕了。   公司产品新版本需要适配iphone5,经过一番折腾算是搞定了。下面分享给大家:   iphone5的屏幕分辨率:1136 x 640 也即是高度变成了568,程序启动时我们需要一张retina图片命名为Default-568h@2x.png。在我们创建工程时xcode会默认为我们创建一个纯黑色的图片

求知若饥,虚心若愚 850

mac iphone 备份_如何在Mac上删除iPhone和iPad备份

mac iphone 备份blackzheep/Shutterstock.comblackzheep / Shutterstock.com Local iPhone and iPad backups can use quite a bit of space. Here’s how to see how much space backups are using and free it up. The...

4895

Universal应用适配:IntentKit在iPhone与iPad上的最佳实践

IntentKit是iOS应用中处理第三方URL Scheme的高效工具,能帮助开发者轻松实现跨设备的应用间交互。本文将详细介绍如何利用IntentKit实现Universal应用在iPhone与iPad上的完美适配,确保用户在不同设备上获得一致且优质的体验。 ## 为什么需要Universal适配? 随着iOS设备生态的多样化,用户可能在iPhone和iPad上使用同一应用。不同设备的屏幕尺

gitblog_01154的博客 645

Cocos2D-iphone 场景切换

常用操作 1.运行第一个场景 我们一般是在应用程序代理AppDelegate的applicationDidFinishLaunching:方法结尾处运行游戏的第一个场景 [java] view plaincopy [[CCDirector sharedDirector] runWithScene: [HelloWorldLay

小邓笔记 2068
上一篇: iPhone之文件操作
下一篇: iPhone之手势切换图片
htttw
博客等级 码龄18年 378粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值