放大scrollview ios6

时间:2012-10-15 13:14:28

标签: objective-c ios uiscrollview ios6 autoresizingmask

我正在尝试在scrollview中实现一个简单的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中列出的UIVonstraintBasedLayoutDebugging类别中的方法也可能有所帮助。

我尝试在谷歌搜索此问题,但我没有取得好成绩。我使用的代码如下。帮助非常值得赞赏

- (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];
}

的Vivek

2 个答案:

答案 0 :(得分:1)

您需要以编程方式创建UIImageView,并添加UIScrollView的子视图。但是你必须在viewDidAppear中创建它。

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

并且您将scrollView.contentSize设置在“viewDidAppear:(BOOL)animated”内,而不是在viewDidLoad中。

答案 1 :(得分:0)

禁用XIB文件中的自动布局。它将位于右侧属性部分的最左侧选项卡下。您可能在不知情的情况下使用它。如果你故意使用它,那么试着理清你的约束,这样它们就不会相互冲突。