草庐IT

objective-c - 转换后检查重叠 View

coder 2023-09-29 原文

我在一个 UIView 中有多个 UIImageView 的。这些 UIImageViews 已被转换。

当手势应用于 UIImageView 的任何一个 时,重叠的 imageView 应该移动到 UIImageView 的 框架之外,我们得到一个完整的 ImageView (所有这些都将以动画方式完成)。

另请注意,图像将被转换,因此我将无法使用框架属性。

现在我正在使用 CGRectIntersectsRect 但它没有给我想要的效果。

最佳答案

经过一番折腾,终于用这个算法达到了预期的效果。

  • 我计算重叠 UIImageView 的 列表并将其存储在一个数组中。 为此,我正在使用 CGRectIntersectsRect

    注意:这还将包括应用手势的 UIImageView(比如目标 ImageView)。

  • 对于这些重叠的 UIImageView 中的每一个,我执行以下步骤:

    1) 计算重叠ImageView与target的夹角 图片 View 。这将为我提供移动 Overlapping ImageView 的方向。

    2) 现在将重叠的 ImageView 移动一些恒定的距离(比如 len),使其保持相同的角度。方向应使其远离目标 ImageView。

    3) 您可以使用 Sin/Cos 函数计算新的 x,y 坐标。

    x = start_x + len * cos(角度);
    y = start_y + len * sin(角度);

    注意:对于中心小于目标 ImageView 中心的 ImageView,您需要减去该值。

    4) 现在将重叠的 ImageView 移动到新的计算中心。

    5) 继续移动它直到 View 不再相交。

  • 我附上了我的代码。我希望它有所帮助。

    -(void)moveImage:(UIImageView *)viewToMove fromView:(UIImageView *)imageToSendBack
    {

            CGFloat angle = angleBetweenLines(viewToMove.center, imageToSendBack.center);
    
            CGFloat extraSpace = 50;
    
            CGRect oldBounds = viewToMove.bounds;
            CGPoint oldCenter = viewToMove.center;
    
            CGPoint shiftedCenter;
    
            while(CGRectIntersectsRect(viewToMove.frame,imageToSendBack.frame))
            {
                 CGPoint startPoint = viewToMove.center;
    
                shiftedCenter.x = startPoint.x - (extraSpace * cos(angle));
    
                if(imageToSendBack.center.y < viewToMove.center.y)
                    shiftedCenter.y = startPoint.y + extraSpace * sin(angle);
                else
                    shiftedCenter.y = startPoint.y - extraSpace * sin(angle);
    
    
                viewToMove.center = shiftedCenter;
    
            }
            viewToMove.bounds = oldBounds;
            viewToMove.center = oldCenter;
    
            [self moveImageAnimationBegin:viewToMove toNewCenter:shiftedCenter];
        }
    

关于objective-c - 转换后检查重叠 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614190/

有关objective-c - 转换后检查重叠 View的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  5. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  6. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  7. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  8. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

随机推荐