Вопрос

У меня есть код, который я хочу изменить, чтобы получить способность к увеличению. Теперь мое приложение делает только горизонтальный свиток, но не зум.

Я что -то скучаю, потому что я попробовал «ViewForZoomingInscrollView»: «Без успеха. Как я могу получить зум в этом?

Спасибо

#import <UIKit/UIKit.h>

@interface IntroductionViewController : UIViewController <UIScrollViewDelegate>{
    IBOutlet UIScrollView *scrollView;

    CGRect rectScrollView;

    int scrollWidth;  
    int scrollHeight;  

    NSArray *contentArray; 

    UIColor *bcgColor; 

    BOOL rememberPosition;  
    NSString *positionIdentifier;

}

@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;

/// returns width of the scollview  
- (int)getScrollViewWidth;  

/// set width and height for your final UIScrollView  
- (void)setWidth:(int)width andHeight:(int)height;  

/// set the exactly same size as it is your parent view  
- (void)setSizeFromParentView:(UIScrollView *)scView;  

/// set background color for your UIScrollView  
- (void)setBackGroudColor:(UIColor *)color;  

/// set an array with images you want to display in your new scroll view  
- (void)setContentArray:(NSArray *)images; 

/// enable position history  
- (void)enablePositionMemory;  

/// enable position history with custom memory identifier  
- (void)enablePositionMemoryWithIdentifier:(NSString *)identifier;  

/// returns your UIScrollView with predefined page  
- (UIScrollView *)getWithPosition:(int)page;  

/// returns your UIScrollView with enabled position history  
- (UIScrollView *)getWithPositionMemory;  

/// returns your UIScrollView with enabled position history with custom memory identifier  
- (UIScrollView *)getWithPositionMemoryIdentifier:(NSString *)identifier;  

/// returns your UIScrollView  
- (UIScrollView *)get;  


@end

и реализация:

#import "IntroductionViewController.h"


#define kIGUIScrollViewImagePageIdentifier                      @"kIGUIScrollViewImagePageIdentifier"  
#define kIGUIScrollViewImageDefaultPageIdentifier               @"Default"  

@implementation IntroductionViewController

@synthesize scrollView;


- (int)getScrollViewWidth {  
    return ([contentArray count] * scrollWidth);  
}

- (void)setWidth:(int)width andHeight:(int)height {  
    scrollWidth = width;  
    scrollHeight = height;  
    if (!width || !height) rectScrollView = [[UIScreen mainScreen] applicationFrame];  
    else rectScrollView = CGRectMake(0, 0, width, height);  
}

- (void)setSizeFromParentView:(UIScrollView *)scView {  
    scrollWidth = scView.frame.size.width;  
    scrollHeight = scView.frame.size.height;  
    rectScrollView = CGRectMake(0, 0, scrollWidth, scrollHeight);  
}  

- (void)setContentArray:(NSArray *)images {  
    contentArray = images;
}

- (void)setBackGroudColor:(UIColor *)color {  
    bcgColor = color;  
}  


- (void)enablePositionMemoryWithIdentifier:(NSString *)identifier {  
    rememberPosition = NO;  
    if (!identifier) identifier = kIGUIScrollViewImageDefaultPageIdentifier;  
    positionIdentifier = identifier;  
}  

- (void)enablePositionMemory {  
    [self enablePositionMemoryWithIdentifier:nil];  
}

- (UIScrollView *)getWithPosition:(int)page {  
    if (!contentArray) {  
        contentArray = [[[NSArray alloc] init] autorelease];  
    }  
    if (page > [contentArray count]) page = 0;  

    if (!scrollWidth || !scrollHeight) {  
        rectScrollView = [[UIScreen mainScreen] applicationFrame];  
        scrollWidth = rectScrollView.size.width;  
        scrollHeight = rectScrollView.size.height;  
    }  
    rectScrollView = CGRectMake(0, 0, scrollWidth, scrollHeight);  

    self.scrollView = [[UIScrollView alloc] initWithFrame:rectScrollView];  
    self.scrollView.contentSize = CGSizeMake([self getScrollViewWidth], scrollHeight);  
    if (!bcgColor) bcgColor = [UIColor blackColor];  
    self.scrollView.backgroundColor = bcgColor;  
    self.scrollView.alwaysBounceHorizontal = YES;  
    self.scrollView.contentOffset = CGPointMake(page * scrollWidth, 0);  
    self.scrollView.pagingEnabled = YES;  


    UIView *main = [[[UIView alloc] initWithFrame:rectScrollView] autorelease];  
    int i = 0;  
    for (UIImage *img in contentArray) {  
        UIImageView *imageView = [[UIImageView alloc] init];  
        imageView.image = img;
        imageView.contentMode = UIViewContentModeScaleAspectFit;  
        imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);  
        imageView.backgroundColor = [UIColor blackColor];  
        float ratio = img.size.width/rectScrollView.size.width;  
        CGRect imageFrame = CGRectMake(i, 0, rectScrollView.size.width, (img.size.height / ratio));  
        imageView.frame = imageFrame;
        [self.scrollView addSubview:(UIView *)imageView];  
        i += scrollWidth; 
        [imageView release];  
    }  
    [main addSubview:scrollView];


    //if (margin) [margin release];
    [self.scrollView release];
    [self.scrollView release];
    return (UIScrollView *)main;


}


- (UIScrollView *)get {  
    return [self getWithPosition:0];  
}  

- (UIScrollView *)getWithPositionMemory {  
    [self enablePositionMemory];  
    return [self getWithPosition:[[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, kIGUIScrollViewImageDefaultPageIdentifier]] intValue]];  
}

- (UIScrollView *)getWithPositionMemoryIdentifier:(NSString *)identifier {  
    [self enablePositionMemoryWithIdentifier:identifier];  
    return [self getWithPosition:[[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, positionIdentifier]] intValue]];  
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv {  
    int page = sv.contentOffset.x / sv.frame.size.width;
    if (rememberPosition) {  
        [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%d", page] forKey:[NSString stringWithFormat:@"%@%@", kIGUIScrollViewImagePageIdentifier, positionIdentifier]];  
        [[NSUserDefaults standardUserDefaults] synchronize];  
    }  
}

- (NSArray *)getImages {  
    NSMutableArray *arr = [[[NSMutableArray alloc] init] autorelease];

    // codice per intercettare la lingua impostata dall utente
    NSUserDefaults  *defaults  = [NSUserDefaults standardUserDefaults];
    NSArray         *languages  = [defaults objectForKey:@"AppleLanguages"];
    NSString    *currentLanguage  = [languages objectAtIndex:0];
    NSLog(@"Codice lingua %@", currentLanguage);

    if( [currentLanguage isEqualToString:@"es"] ){
        [arr addObject:[UIImage imageNamed:@"image1-intro.jpg"]];  
        [arr addObject:[UIImage imageNamed:@"image2-intro.jpg"]];  
        [arr addObject:[UIImage imageNamed:@"image3-intro.jpg"]];
        [arr addObject:[UIImage imageNamed:@"image4-intro.jpg"]];
        [arr addObject:[UIImage imageNamed:@"image5-intro.jpg"]];
        [arr addObject:[UIImage imageNamed:@"image6-intro.jpg"]];
        return (NSArray *)arr;
    }

    else {
        [arr addObject:[UIImage imageNamed:@"image1-intro.jpg"]];  
        [arr addObject:[UIImage imageNamed:@"image2-intro.jpg"]];  
        [arr addObject:[UIImage imageNamed:@"image3-intro.jpg"]];
        [arr addObject:[UIImage imageNamed:@"image4-intro.jpg"]];
        [arr addObject:[UIImage imageNamed:@"image5-intro.jpg"]];
        return (NSArray *)arr;
    }
}


/*
 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
 if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
 // Custom initialization
 }
 return self;
 }
 */


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad {
    [super viewDidLoad];

    //codice per mettere il titolo come immagine
    UIImage *titolo = [UIImage imageNamed: @"introTitle.png"];
    UIImageView *titoloView = [[UIImageView alloc] initWithImage: titolo];
    self.navigationItem.titleView = titoloView;


    IntroductionViewController *svimage = [[IntroductionViewController alloc] init];  
    [svimage setContentArray:[self getImages]];
    [svimage setSizeFromParentView:scrollView];
    [self.view addSubview:[svimage getWithPosition:0]];
    [svimage release];
    [titoloView release];
}

/*
 // Override to allow orientations other than the default portrait orientation.
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 // Return YES for supported orientations
 return (interfaceOrientation == UIInterfaceOrientationPortrait);
 }
 */

- (void)didReceiveMemoryWarning {
    NSLog(@"memoria view");
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}


@end
Это было полезно?

Решение

А где ваша реализация ViewForzoomingInscrollView? Что он возвращается?

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return yourViewToBeZoomed; // 
}

РЕДАКТИРОВАТЬ:

Итак, в целом, с этим методом вы просто указываете, что вы должны прокрутить, когда пользователь использует AD Move 2 пальца на вашем ScrollView ... обычно (но не всегда) это первый подзадач самого UIScrollView ...

Итак, если это ваш случай, просто попробуйте этот код:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return [scrollView2.subviews objectAtIndex:0];
}

И если вы добавили больше подвида и хотите увеличить их тоже, вам лучше добавить их не непосредственно в свой UiscrollView, а в ваш первый подвет, чтобы они увеличили его ...

Чао,

Лука

Другие советы

Вы установили Maximumzoomscale? Либо в коде, либо в IB…

Это сработало, пример Photoscroller Apple, он также использовал плитку, но вы можете отключить это (конкурировать или просто отключить белые линии). Это также поддерживает вращение.

Вот где вы можете использовать обычные изображения вместо плитки:

- (void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index
{
    page.index = index;
    page.frame = [self frameForPageAtIndex:index];

    // Use tiled images

    /*
    [page displayTiledImageNamed:[self imageNameAtIndex:index]
                            size:[self imageSizeAtIndex:index]];
    */

    // To use full images instead of tiled images, replace the "displayTiledImageNamed:" call
    // above by the following line:
    [page displayImage:[self imageAtIndex:index]];
}

И если вы хотите использовать Tiling (для больших изображений), но не хотите видеть белые линии, вот код (в Imagescrollview):

- (void)displayTiledImageNamed:(NSString *)imageName size:(CGSize)imageSize
{
    // clear the previous imageView
    [imageView removeFromSuperview];
    [imageView release];
    imageView = nil;

    // reset our zoomScale to 1.0 before doing any further calculations
    self.zoomScale = 1.0;

    // make a new TilingView for the new image
    imageView = [[TilingView alloc] initWithImageName:imageName size:imageSize];
    /*
    [(TilingView *)imageView setAnnotates:YES]; // ** remove this line to remove the white tile grid **
    */
    [self addSubview:imageView];

    self.contentSize = imageSize;
    [self setMaxMinZoomScalesForCurrentBounds];
    self.zoomScale = self.minimumZoomScale;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top