0

我正在尝试在滚动视图中实现一个简单的 ImageView 来显示图像。我想特别实现捏缩放功能。我实现了以下代码(取自苹果网站上的一个 Objective C 示例代码)。我在 ios 5 上彻底测试了缩放,似乎没有问题。但是,当我将代码移植到 ios 6 并测试缩放功能时,一段时间后我收到以下错误消息,并且我的应用程序因缩放结果倾斜而崩溃。

无法同时满足约束。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的;(2) 找到添加了一个或多个不需要的约束的代码并修复它。(注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)

NSAutoresizingMaskLayoutConstraint:0x8808360 h=--- v=--- V:[UIWindow:0x744db00(480)], NSLayoutConstraint:0x71286d0 UIView:0x71222c0.bottom == UIWindow:0x744db00.bottom, NSLayoutConstraint:0x7128650 V:|-(20) -[UIView:0x71222c0] (名称: '|':UIWindow:0x744db00), NSLayoutConstraint:0x7120c50 UIImageView:0x7451630.bottom == UIScrollView:0x71206f0.bottom, NSLayoutConstraint:0x7120c90 V:|-(0)-[UIImageView:0x7451630] (名称:'|':UIScrollView:0x71206f0),NSLayoutConstraint:0x7120bd0 UIImageView:0x7451630.centerY == UIScrollView:0x71206f0.centerY, NSLayoutConstraint:0x7122a50 V:|-(10)-[UIScrollView:0x71206f0] (名称:'|' :UIView:0x71222c0), NSLayoutConstraint:0x7122940 V:[UIScrollView:0x71206f0]-(38)-| (名称:'|':UIView:0x71222c0)

将尝试通过打破约束来恢复

中断 objc_exception_throw 以在调试器中捕获它。中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。

我试着用谷歌搜索这个问题,但我没有得到好的结果。我正在使用的代码如下。非常感谢帮助

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // set the tag for the image view
    [self.imageView setTag:ZOOM_VIEW_TAG];

    // calculate minimum scale to perfectly fit image width, and begin at that scale
    NSLog(@"[imageScrollView frame].size.width : %f",[self.scrollVIew frame].size.width);
    NSLog(@"[imageView frame].size.width : %f",[self.imageView frame].size.width);

    NSLog(@"[imageScrollView frame].size.height : %f",[self.scrollVIew frame].size.height);
    NSLog(@"[imageView frame].size.height : %f",[self.imageView frame].size.height);

    float minimumScale = [self.scrollVIew frame].size.width  / [self.imageView frame].size.width;
    minimumScale = 300.0/1200.0;

    NSLog(@"minimumScale : %f",minimumScale);

    [self.scrollVIew setMinimumZoomScale:minimumScale];
    [self.scrollVIew setZoomScale:minimumScale];

    NSLog(@"imageScrollView.zoomScale : %f",self.scrollVIew.zoomScale);
    NSLog(@"imageScrollView.minimumZoomScale = minimumScale : %f",self.scrollVIew.minimumZoomScale = minimumScale);

    self.scrollVIew.contentSize = CGSizeMake(1200.0, 800.0);
    self.scrollVIew.delegate = self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return [self.scrollVIew viewWithTag:ZOOM_VIEW_TAG];
}

维韦克

4

2 回答 2

1

您需要以编程方式创建您的UIImageView,并添加您的UIScrollView. 但是你必须在 viewDidAppear 里面做这个。

只是你的 UIScrollView 可以在 StoryBoard 中制作!

您将设置scrollView.contentSizeviewDidAppear:(BOOL)animated”的内部,而不是 viewDidLoad 的内部。

于 2013-02-05T04:13:22.703 回答
0

在您的 XIB 文件中禁用自动布局。它将位于右侧属性部分中最左侧的选项卡下。您可能在不知情的情况下使用它。如果您有意使用它,请尝试整理您的约束,以免它们相互冲突。

于 2012-10-15T14:24:20.330 回答