2

UIImageViewで満たされたUIScrollViewがあります。UIScrollViewは、ユーザーがそれらの画像を「反転」できるようにページングが有効になっています。各UIImageViewには、ピンチズーム用のUIPinchGestureRecognizerと、ズームインしたときにその画像をパンするためのUIPanGestureRecognizerがあります。
おそらくお気づきかもしれませんが、私が達成したいのは、iBooksがそのアプリケーションで行うことと同じです。

しかし、私はこの仕事を手に入れるのに苦労しています。

私の「BookPageViewController」では、UIScrollViewを設定し、sqliteのデータ(ページ番号、ファイル名など)に基づいてフォルダーからの画像を入力しました。

_pageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

NSUInteger pageCount = [pages count];

for (int i = 0; i < pageCount; i++) {

    CGFloat x = i * self.view.frame.size.width;

    // Page Settings
    UIImageView *pageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, 0, self.view.frame.size.width, self.view.frame.size.height)];

    pageView.backgroundColor = [UIColor greenColor];
    pageView.image = [pages objectAtIndex:i];
    pageView.userInteractionEnabled = YES;
    pageView.tag = i;

    // Gesture Reocgnisers
    UIPinchGestureRecognizer *pinchGr = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchImage:)];
    pinchGr.delegate = self;
    [pageView addGestureRecognizer:pinchGr];

    UIPanGestureRecognizer *panGr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panImage:)];
    [pageView addGestureRecognizer:panGr];

    // Finally add this page to the ScrollView
    [_pageScrollView addSubview:pageView];
}  

_pageScrollView.contentSize = CGSizeMake(self.view.frame.size.width * pageCount, self.view.frame.size.height);
_pageScrollView.pagingEnabled = YES;
_pageScrollView.delegate = self;

[self.view addSubview:_pageScrollView];  

そして、ここStackoverflowの別の良い質問の助けを借りて、私はそれらを置きました:

- (void) pinchImage:(UIPinchGestureRecognizer*)pgr {

  [self adjustAnchorPointForGestureRecognizer:pgr];

  if ([pgr state] == UIGestureRecognizerStateBegan || [pgr state] == UIGestureRecognizerStateChanged) {
    if ([pgr scale]) {
        NSLog(@"SCALE: %f", [pgr scale]);
        [pgr view].transform = CGAffineTransformScale([[pgr view] transform], [pgr scale], [pgr scale]);
        [pgr setScale:1];
    } else {
        NSLog(@"[PAMPHLET PAGE]: The image cannot be scaled.");
    }
  }
}  

私の問題は、ピンチジェスチャを使用してUIImageViewの1つを拡大すると、画像が次の画像を超えて(移動して)非表示になることです。ズームイン/ズームアウトとUIImageViewのサイズ(UIImage自体ではない)を「制限」する方法があるはずだと思いますが、ここからどこに行くべきかわかりません。また、スケールを制限するコードを次のように配置しました。

([pgr scale] > 1.0f && [pgr scale] < 1.014719) || ([pgr scale] < 1.0f && [pgr scale] > 0.98f)

しかし、それは機能しませんでした...

iOSの専門家にとっては難しいことではないことは知っていますが、Objective-cはまったく初めてであり、実際のアプリケーションを開発するのはこれが初めてです。これが良い習慣ではない場合は、ibooksのようにこれを行う方法を実現するためのアイデアも知りたいです(たとえば、UIImageViewをUIScrollViewに配置してから、UIScrollViewを別のUIScrollViewに配置します)...

別の初心者の質問で申し訳ありませんが、私は本当に助けが必要です。
前もって感謝します。

4

1 に答える 1

0

自分で試してみなくても、最初の推測では、UIImageView の変換がそのフレームも変換するということです。それを解決する 1 つの方法は、UIImageView を別の UIView に配置し、その UIView を UIScrollView に配置することです。ジェスチャ レコグナイザーと変換は、UIImageView に引き続き存在します。UIView の clipsToBounds プロパティが YES に設定されていることを確認してください。

于 2013-03-25T11:45:38.320 に答える