热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在导航控制器上方添加放大镜-Addmagnifyingglassabovenavigationcontroller

Objective:TogetaUIView,whichisasmallmagnifyingglass,tobeplacedabovethenavigationcon

Objective: To get a UIView, which is a small magnifying glass, to be placed above the navigation controller. It's exactly like the loupe in the Notes program.

目标:将UIView(一个小放大镜)放置在导航控制器上方。它就像Notes程序中的放大镜一样。

I have partly accomplished this task with the following code:

我用以下代码部分完成了这项任务:

MyAppDelegate *app = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[[[[app navigationController] view] superview] addSubview:_loupe];

This allows the loupe to be displayed above the navigation controller. Note: The _loupe variable contains an instance of a UIView that will magnify the view.

这允许放大镜显示在导航控制器上方。注意:_loupe变量包含将放大视图的UIView实例。

This code works perfectly when in Portrait. When I change the orientation to Landscape, however, the coordinates of the _loupe appear to still be in portrait mode.

此代码在Portrait中完美运行。但是,当我将方向更改为横向时,_loupe的坐标仍显示为纵向模式。

Through lots of trial and error and hours of head banging I realized that the UINavigationController, which is added as the rootViewController of the application, never updates its coordinates when the orientation changes. ALL other views, including the RootViewController (the default class created when creating a new application in XCode) has their coordinates updated.

通过大量的试验和错误以及数小时的头部敲击,我意识到UINavigationController(作为应用程序的rootViewController添加)在方向更改时永远不会更新其坐标。所有其他视图,包括RootViewController(在XCode中创建新应用程序时创建的默认类)都更新了其坐标。

I tried to rectify this by subclassing the UINavigationController with my own controller to make it so the shouldAutorotateToInterfaceOrientation: gets called by the navigation controller instead of the RootViewController. I was hoping that the reason it didn't rotate is because it wasn't the controller requesting the orientation. Nothing.

我试图通过使用我自己的控制器对UINavigationController进行子类化来纠正这个问题,因此导航控制器而不是RootViewController会调用shouldAutorotateToInterfaceOrientation。我希望它不旋转的原因是因为它不是要求定向的控制器。没有。

I've also rotated the _loupe view with the following:

我还使用以下内容旋转_loupe视图:

CGAffineTransform transform = _loupe.transform;
transform = CGAffineTransformMakeRotation([self degreesToRadians:90.0]);
_loupe.transform = transform;
_loupe.bounds = CGRectMake(0, 0, 480, 320);
_loupe.frame = CGRectMake(0, 0, 80, 80);

This makes the UIView, underneath the touch, magnified right side up. Originally, the UIView underneath was rotated -90 when changing the orientation to the left. So I'm almost there... but the coordinates are still screwed up.

这使得触摸下方的UIView正面向上放大。最初,当将方向改为左侧时,下方的UIView旋转-90。所以我差不多......但坐标还是搞砸了。

I've also tried changing the _loupe.bounds to CGRectMake(0, 480, 480, 320) believing that changing the origin might match the underlying coordinate system. No dice.

我也尝试将_loupe.bounds更改为CGRectMake(0,480,480,320),认为更改原点可能与底层坐标系匹配。没有骰子。

My last resort was doing a transform on the actual UITouch x/y points.

我的最后一招是对实际的UITouch x / y点进行转换。

    CGPoint point = [touch locationInView:self];
    CGAffineTransform transform = CGAffineTransformRotate([_loupe transform], [self degreesToRadians:90.0]);
    CGPoint tPoint = CGPointApplyAffineTransform(point, transform);

No dice. However, this does make the loupe displayed near the visible area. What I'm finding is that moving the touch on the x axis moves the loupe on the y axis and moving the touch on the y axis moves the loupe on the x axis. So now it's completely inverted.

没有骰子。但是,这确实使放大镜显示在可见区域附近。我发现的是,在x轴上移动触摸可以在y轴上移动放大镜,在y轴上移动触摸可以在x轴上移动放大镜。所以现在它完全倒转了。

In short, I just want an easy way to display a magnifying glass above the navigation controller without all of this rigmarole.

简而言之,我只是想要一种简单的方法来在导航控制器上方显示放大镜,而不需要这么做。

Edit

I got a little closer by converting the point to the loupe's view.

通过将点转换为放大镜的视图,我得到了一点距离。

CGPoint tPoint = [self convertPoint:point toView:_loupe];

This makes the loupe flicker a lot... it also appears to move the loupe on both the x & y axis (vertically) no matter the direction I move the touch. Getting much closer though!

这使得放大镜闪烁很多......无论我移动触摸的方向如何,它似乎也会在x和y轴(垂直)上移动放大镜。尽可能接近!

1 个解决方案

#1


1  

Resolution

This is it:

就是这个:

CGPoint tPoint = [self convertPoint:point toView:[[[app navigationController] view] superview]];

All I had to do was convert the CGPoint, created from the UITouch event, to that of the coordinate space of the navigation controller's superview (which the loupe is part of).

我所要做的就是将从UITouch事件创建的CGPoint转换为导航控制器的superview(放大镜所属的)坐标空间的CGPoint。


推荐阅读
  • Hihaveannewbieissuewithobjective-c,cocoa&iPhone.IvedeclaredmapViewinmyapplicatio ... [详细]
  • 本文深入探讨了Google Guava库中的Optional类,详细解析了其设计原理和使用方法,并结合实际应用场景展示了如何有效避免空指针异常,提高代码的健壮性和可读性。通过具体示例,文章还介绍了Optional类在数据处理、函数式编程等方面的优势,为开发者提供了实用的参考。 ... [详细]
  • 在Java中,一个类可以实现多个接口,但是否能够继承多个类则存在限制。本文探讨了Java中实现多继承的方法及其局限性,详细分析了通过接口、抽象类和组合等技术手段来模拟多继承的策略,并讨论了这些方法的优势和潜在问题。 ... [详细]
  • 本文深入探讨了Android事件分发机制的源代码,重点分析了DecorView作为Activity根布局的角色及其在事件传递中的作用。同时,详细解析了PhoneWindow在Activity窗口管理中的关键功能,以及它如何与DecorView协同工作,确保用户交互事件的高效处理。 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
  • 本文将详细介绍在Android应用中添加自定义返回按钮的方法,帮助开发者更好地理解和实现这一功能。通过具体的代码示例和步骤说明,本文旨在为初学者提供清晰的指导,确保他们在开发过程中能够顺利集成返回按钮,提升用户体验。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • 在VC环境中,掌握高效的调试技巧和高级应用对于提高开发效率至关重要。本文详细介绍了如何通过检查程序中的括号匹配来避免常见的语法错误。具体操作包括将光标置于待检测的括号(如大括号 {}、方括号 [] 和圆括号 ())上,系统会自动高亮显示对应的配对括号,从而帮助开发者快速定位和修复问题。此外,文章还探讨了其他实用的调试工具和方法,如断点设置、变量监视和调用堆栈分析,以全面提升代码调试的准确性和效率。 ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ... [详细]
  • 本文深入探讨了 `ExpressionChangedAfterItHasBeenCheckedError` 错误的原因及其解决方案。通过分析 Angular 的变更检测机制,详细解释了该错误的发生条件,并提供了多种有效的应对策略,帮助开发者在实际开发中避免这一常见问题。 ... [详细]
  • 本文深入探讨了NDK与JNI技术在实际项目中的应用及其学习路径。通过分析工程目录结构和关键代码示例,详细介绍了如何在Android开发中高效利用NDK和JNI,实现高性能计算和跨平台功能。同时,文章还提供了从基础概念到高级实践的系统学习指南,帮助开发者快速掌握这些关键技术。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
author-avatar
gavinwu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有