2

私が取り組んでいるプロジェクトの1つには、UIScrollView映画館の座席に似たボタンやラベルがたくさんあり、ユーザーがタップして購入する座席を選択できます。ズームすることは可能UIScrollViewですか?を宣言しUIScrollViewDelegatedelegate自分自身に設定し、最小および最大ズームスケールを設定しましたが、viewForZoomingInScrollViewおよびscrollViewDidEndZoomingメソッドに問題があります。メソッドでスクロールビューを返そうとしましたviewForZoomingInScrollViewが、クラッシュします。

コードの一部を次に示します。

- (void) renderSeatMapOnScreen
{    
    int x_offset_row = 10;
    int y_offset_row = 25;
    int x_offset_col = 30;
    int y_offset_col = 0;
    int scrollview_w = 0;
    int scrollview_h = 0;

    NSString *row_name = @"";
    int tag_index  = 0;

    NSMutableArray *seat_map_table = [seat_map_xml seats_map]; 
    NSString *seat_available_str = [seat_avail_xml seat_available];

    HideNetworkActivityIndicator();

    NSLog(@"Seats available = %@", seat_available_str);

    NSArray *seats_avail = [seat_available_str componentsSeparatedByString:@";"];

    int ROW_COL_OFFSET = 25;

    for (int row = 0; row < [seat_map_table count]; row++)
    {
        UILabel * rowlabel = [[UILabel alloc] init];
        rowlabel.frame = CGRectMake(x_offset_row , y_offset_row, 22, 22);

        SeatMapDeclaration *rowmap = [seat_map_table objectAtIndex:row];
        rowlabel.text = rowmap.rows;
        [scrollview addSubview:rowlabel];

        row_name = [NSString stringWithFormat:@"%@", rowmap.rows];

        NSArray *seat = [rowmap.rowmap componentsSeparatedByString:@";"];
        NSLog(@"row[%i] = %@", row, rowmap.rowmap);

        if (row == 0)
        {
            scrollview_w = [seat count] * ROW_COL_OFFSET + y_offset_row;
            total_column = [seat count];
            total_row = [seat_map_table count];
        }

        x_offset_col = 30 ;
        y_offset_col = y_offset_row ;

        for (int column = 0; column < [seat count]; column++)
        {
            if (([[seat objectAtIndex:column] rangeOfString:@"a("].location != NSNotFound)
               || ([[seat objectAtIndex:column] isEqualToString:@""]))
            {
                CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                [imageView setImage:[UIImage imageNamed:@"noseat.png"]];
                [scrollview addSubview:imageView];
            }
            else if ([[seat objectAtIndex:column] rangeOfString:@"b("].location != NSNotFound)
            {
                CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                imageView.image = [UIImage imageNamed:@"noseat.png"];
                [scrollview addSubview:imageView];
            }
            else
            {
                NSString *status = [NSString stringWithFormat:@"%@%@", row_name, [seat objectAtIndex:column]];

                BOOL matchedFound = NO;
                for (int i = 0; i < [seats_avail count]; i++)
                {
                    if ([[seats_avail objectAtIndex:i] isEqualToString:status])
                    {
                        matchedFound = YES ;
                        break ;
                    }
                }

                if (matchedFound == YES)
                {
                    UIButton * seat_btn = [UIButton buttonWithType:UIButtonTypeCustom];
                    [seat_btn setBackgroundImage:[UIImage imageNamed:@"seatavailable.png"] forState:UIControlStateNormal];
                    [seat_btn setBackgroundImage:[UIImage imageNamed:@"seatactive.png"] forState:UIControlStateSelected];
                    seat_btn.frame = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                    tag_index = [[seat objectAtIndex:column] intValue];
                    [seat_btn setTitle:[seat objectAtIndex:column] forState:UIControlStateNormal];
                    seat_btn.titleLabel.font = [UIFont fontWithName:@"Helvetica" size:12.0];
                    seat_btn.tag = tag_index + row * 100;
                    [seat_btn addTarget:self
                                 action:@selector(checkboxButton:)
                       forControlEvents:UIControlEventTouchUpInside];
                    [scrollview addSubview:seat_btn];

                }
                else
                {
                    CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                    UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                    imageView.image = [UIImage imageNamed:@"seat_not_available.png"];
                    [scrollview addSubview:imageView];
                }
            }

            x_offset_col += ROW_COL_OFFSET ;

            NSString *data = @"";
            [seatControl addObject:data];
        }
        y_offset_row += ROW_COL_OFFSET;
    }

    UILabel *screenlabel = [[UILabel alloc] init];
    screenlabel.frame = CGRectMake((scrollview_w-300)/2, 3, 300, 15);
    screenlabel.text = @"Screen";
    screenlabel.backgroundColor = [UIColor blackColor];
    screenlabel.textColor = [UIColor whiteColor] ;
    screenlabel.font = [UIFont fontWithName:@"Helvetica" size:10.0];
    screenlabel.textAlignment = UITextAlignmentCenter;
    [scrollview addSubview:screenlabel];

    scrollview_h = y_offset_row + ROW_COL_OFFSET;
    // Adjust scroll view
    [scrollview setContentSize:CGSizeMake(scrollview_w, scrollview_h )];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    NSLog(@"1");

    return scrollview;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
    NSLog(@"2");
}
4

3 に答える 3

1

の:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
  NSLog(@"1");

  return scrollview;
}

UIScrollViewスクロール/ズームしたいサブビューではなく、それ自体を返すことになっています。

多くのサブビューがある場合は、返されるすべてのサブビューに対してコンテナー ビューを作成することをお勧めしますviewForZoomingInScrollView。シートをスクロールビュー自体に追加する代わりに、コンテナ ビューにシートを追加します。

于 2013-01-08T09:24:25.820 に答える
0

ズームは、viewForZoomingInScrollView:デリゲートコールバックを実装する場合にのみ機能します。

UIImageView *tempImage = [[UIImageView alloc]initWithImage:[UIImage imageWithData:data]];
self.imageView = tempImage;

scrollView.contentSize = CGSizeMake(imageView.frame.size.width , imageView.frame.size.height);
scrollView.maximumZoomScale = 1;
scrollView.minimumZoomScale = .37;
scrollView.clipsToBounds = YES;
scrollView.delegate = self;
[scrollView addSubview:imageView];
scrollView.zoomScale = .37;

-(UIView *) viewForZoomingInScrollView:(UIScrollView *)inScroll {
  return imageView;
}
于 2013-01-08T10:35:41.540 に答える
0

で特定の座席にズームしたい場合はUIScrollView、 を使用する必要がありますzoomToRect: animated:。ズームインしたい特定の長方形 (座席など) を指定できます。

于 2013-01-08T09:19:43.547 に答える