草庐IT

iphone - 防止在 MKMapView 中滚动,缩放时也是如此

coder 2023-07-25 原文

一旦用户开始在 MKMapView 中捏合,scrollEnabled 似乎就可以破解。

您仍然不能用一根手指滚动,但如果您在放大和缩小时用两根手指滚动,则可以移动 map 。

我试过了:

  • 子类化 MKMapKit 以禁用其中的 ScrollView 。
  • 实现 –mapView:regionWillChangeAnimated: 强制居中。
  • 禁用 scrollEnabled

但没有运气。

谁能告诉我一个只放大 MKMapView 的可靠方法,这样中心点总是在中间?

最佳答案

您可以尝试使用 UIPinchGestureRecognizer 自己处理捏合手势:

首先将scrollEnabledzoomEnabled 设置为NO 并创建手势识别器:

UIPinchGestureRecognizer* recognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self
                                                                                 action:@selector(handlePinch:)];
[self.mapView addGestureRecognizer:recognizer];

在识别器处理程序中根据缩放比例调整MKCoordinateSpan:

- (void)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
    static MKCoordinateRegion originalRegion;
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        originalRegion = self.mapView.region;
    }    

    double latdelta = originalRegion.span.latitudeDelta / recognizer.scale;
    double londelta = originalRegion.span.longitudeDelta / recognizer.scale;

    // TODO: set these constants to appropriate values to set max/min zoomscale
    latdelta = MAX(MIN(latdelta, 80), 0.02);
    londelta = MAX(MIN(londelta, 80), 0.02);
    MKCoordinateSpan span = MKCoordinateSpanMake(latdelta, londelta);

    [self.mapView setRegion:MKCoordinateRegionMake(originalRegion.center, span) animated:YES];
}

这可能不像 Apple 的实现那样完美,但它应该可以解决您的问题。

关于iphone - 防止在 MKMapView 中滚动,缩放时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830516/

有关iphone - 防止在 MKMapView 中滚动,缩放时也是如此的更多相关文章

  1. ruby-on-rails - Rails 3.2 防止使用错误保存对象 - 2

    我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中

  2. ruby - 防止SQL注入(inject)/好的Ruby方法 - 2

    Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject

  3. ruby-on-rails - 如何防止错误 "code converter not found (UTF-8)"? - 2

    我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(

  4. ruby-on-rails - 防止为每个评论调用 upvote 模型 - 2

    我有三个模型:User、Comment和Upvote。User-to-Comment是一对多的关系,Comment-to-Upvote是一对多的关系,而User-to-Upvote是一对多的关系。我想做一些类似于在Stackoverflow上进行投票的事情。因此,当您投赞成票/反对票时,箭头将突出显示并保持突出显示状态,即使您在几天/几周后刷新页面或返回页面也是如此。目前我正在这样做:voted?方法在哪里:defself.voted?(user_id,comment_id)find_by(comment_id:comment_id,user_id:user_id).present?e

  5. ruby-on-rails - 为什么初始化变量如此重要? - 2

    有人可以向我解释一下,为什么不初始化first_idx和last_idx会导致代码无法运行??当我运行它时,出现此错误“未定义的局部变量或方法last_idx”。我知道建议总是初始化变量,但我不明白为什么。毕竟first_idx和last_idx总是会在循环中得到一个值,因为参数letter总是出现在字符串中(在这个特定问题中)。我真的很感激一些(简单的)见解。谢谢!P.S,我也知道在Ruby中使用#index和#rindex很容易解决这个问题,但我不允许使用直接的方法来解决它。deffind_for_letter(string,letter)first_idx=nil0.upto(s

  6. ruby - 绕过 Element 的方法无法滚动到 View 中 - Watir-webdriver with Ruby - 2

    因此,我们的页面中有以下代码:OnOff这是2个单选按钮。'开和关'。“关闭”是默认值。使用Watir-webdriver和Ruby,我们想要选择“打开”单选按钮。我们这样做:browser.radio(:id=>"HasRegistration_true").set但在这样做时,我们得到以下错误:`WebElement.clickElement':Elementcannotbescrolledintoview:[objectHTMLInputElement](Selenium::WebDriver::Error::MoveTargetOutOfBoundsError)我们知道Sele

  7. ruby - 防止 ruby​​ sinatra 中的 session 固定 - 2

    ruby中的大多数session固定主题都与Rails相关。sinatra中是否存在任何session固定漏洞?在rails中,我们通常建议在分配session之前执行reset_session。我们如何防止sinatra中的session固定? 最佳答案 Sinatra默认使用Rack::Protectiongem来防止许多常见漏洞。您可能对其session劫持保护特别感兴趣。这些是Rack::Protectiongem防止的一些事情:跨站请求伪造真实性token:如果给定的访问token与session中包含的token相匹配,

  8. ruby-on-rails - RSpec load_missing_constant,期望 X 定义 Y(确实如此) - 2

    当我们运行时bundleexecrake规范尝试加载环境时出现错误:...gems/activesupport-3.2.8/lib/active_support/dependencies.rb:503:in`load_missing_constant':Expected...app/models/links/category.rbtodefineLinks::Category(LoadError)文件app/models/links/Category.rb确实定义了Links::Category。更奇怪的是,在guard和spork下运行时不会发生错误(我们运行测试的标准方式):bun

  9. iphone - 扩展 restful_authentication/AuthLogic 以支持匿名 iPhone 的延迟登录的最佳方法是什么? - 2

    我正在构建一个与RubyonRails后端对话的iPhone应用程序。RubyonRails应用程序还将为Web用户提供服务。restful_authentication插件是提供快速和可定制的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户在新列中存储一个由手机的唯一标识符([[UIDevicedevice]uniqueIdentifier])自动创建的帐户。稍后,当用户准备好创建用户名/密码时,帐户将更新为包含用户名和密码,iPhone唯一标识符保持不变。用户在设置用户名/密码之前不能访问该网站。然而,他们可以使用iPhone应用程序,因为该应用程序可以使用它的标识符

  10. ruby-on-rails - 谷歌地图、Ruby on Rails、用一个标记缩放级别 - 2

    我正在使用apneadiving/Google-Maps-for-Rails添加googlemaps支持(感谢awesomegem)但是,我发现了一个小故障,这很可能是我的错。当有多个标记时,auto_zoom效果很好。但是,当只有一个标记时,它会放大到不漂亮的最大级别。“缩放”仅在auto_zoom为false时有效,所以这不是我想要的。因此您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。有解决办法吗?我的解释有道理吗?这是GoogleMapsAPI的限制吗?谢谢... 最佳答案 此行为是由于goog

随机推荐