Как добавить UIButton на каждое изображение, которое находится в режиме прокрутки? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть приложение для iPhone, в котором у меня есть несколько изображений.Эти изображения добавить в виде изображения.Это представление изображения добавить вспомогательное представление с представлением прокрутки.Теперь я хочу добавить прозрачную кнопку на каждое изображение.Как я могу это сделать?Я показал мой код ниже:

    - (void)layoutScrollImages{
    UIImageView *view = nil;
    NSArray *subviews = [scrollView1 subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (kScrollWidth);
        }
    }

    // set the content size so it can be scrollable
    [scrollView1 setContentSize:CGSizeMake((kNoImages * 500), 700)];
}





    - (void)viewDidLoad{
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

    // 1. setup the scrollview for multiple images and add it to the view controller
    //
    // note: the following can be done in Interface Builder, but we show this in code for clarity
    [scrollView1 setBackgroundColor:[UIColor blackColor]];
    [scrollView1 setCanCancelContentTouches:NO];
    scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scrollView1.clipsToBounds = YES;        // default is NO, we want to restrict drawing within our scrollview
    scrollView1.scrollEnabled = YES;

    //imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image0.jpg"]];
    [scrollView1 addSubview:imageView];
    [scrollView1 setContentSize:CGSizeMake(500,700)];
    scrollView1.minimumZoomScale = 1;
    scrollView1.maximumZoomScale = 3;
    scrollView1.delegate = self;
    [scrollView1 setScrollEnabled:YES];

    // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
    // if you want free-flowing scroll, don't set this property.
    scrollView1.pagingEnabled = YES;

    // load all the images from our bundle and add them to the scroll view
    NSUInteger i;
    for (i = 1; i <= kNoImages; i++)
    {
        NSString *imageName = [NSString stringWithFormat:@"page-%d.jpg", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *ImageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList" 
        CGRect rect = ImageView.frame;
        rect.size.height = kScrollHeight;
        rect.size.width = kScrollWidth;
        ImageView.frame = rect;
        ImageView.tag = i;    // tag our images for later use when we place them in serial fashion
        UIButton *btnView2= [UIButton buttonWithType:UIButtonTypeCustom];
        [btnView2 setTitle:@"view" forState:UIControlStateNormal];
        [btnView2 addTarget:self action:@selector(View:)forControlEvents:UIControlEventTouchDown];
        [btnView2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        btnView2.frame=CGRectMake(0,0,460,460 );
        [scrollView1 addSubview:btnView2];

     scrollView1.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

        [scrollView1 addSubview:ImageView];

        [ImageView release];
    }

    [self layoutScrollImages];    // now place the photos in serial layout within the scrollview
}



    -(IBAction)View:(id)sender{

    NSURL *imgUrl=[[NSURL alloc] initWithString:@"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f.jpg"];                 
    NSData *imgData = [NSData dataWithContentsOfURL:imgUrl];
    UIImage *img = [UIImage imageWithData:imgData];
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
    [self.view addSubview:imgView];
    //[self.navigationController pushViewController:ivc animated:YES];

    [imgUrl release]; 


}

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Вместо добавления Imageview и прозрачной кнопки поверх Imageview.Вы можете просто добавить пользовательский тип UIButton и установить изображение кнопки для вашего изображения в виде прокрутки.Нет необходимости снимать изображения и UIButton.Просто возьмите UIButton и setImage, и все будет в порядке.Я попытался дать вам пример кода ниже из моего приложения.Пожалуйста, измените его в соответствии с вашими потребностями.Я думаю, что это то, что вам нужно.

First of Take все константы в одном из глобальных файлов.Я взял это в en.lproj.как ниже.

"TotalThumbnailCount"="6";
"Coloumn"="2";
"ThumbnailHeight"="151";
"ThumbnailWidth"="151";

//Marging between two images

"MarginX" = "6";
"MarginY" = "6";

Затем инициализируйте все ваши локальные переменные из глобальных переменных.как показано ниже

 -(void)PopulateVariables{
TotalThumbnail = [NSLocalizedString(@"TotalThumbnailCount",nil) intValue];
Colomn = [NSLocalizedString(@"Coloumn",nil) intValue];
ThumbnailHeight = [NSLocalizedString(@"ThumbnailHeight",nil) intValue];
ThumbnailWidth = [NSLocalizedString(@"ThumbnailWidth",nil) intValue];
MarginX = [NSLocalizedString(@"MarginX",nil) intValue];
MarginY= [NSLocalizedString(@"MarginY",nil) intValue];
}

Теперь вы должны инициировать миниатюры изображений с помощью функции UIButton снизу.

-(void)PopulateThumbnails
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
XCordinate=MarginX;
YCordinate = MarginY;file:
for(int i=1; i <=TotalThumbnail;i++){
    UIButton *btnMenu = [UIButton buttonWithType:UIButtonTypeCustom];
    //NSData *data =UIImageJPEGRepresentation(, 1);
    [btnMenu setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i]] forState:UIControlStateNormal];
    CGRect frame = btnMenu.frame;
    frame.size.width=ThumbnailWidth;
    frame.size.height=ThumbnailHeight;
    frame.origin.x=XCordinate;
    frame.origin.y=YCordinate;
    btnMenu.frame=frame;
    btnMenu.tag=i;
    btnMenu.alpha = 1;
    [btnMenu addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:btnMenu];
    XCordinate = btnMenu.frame.origin.x + btnMenu.frame.size.width + MarginX;

    if(i%Colomn==0)
    {
        XPosition = XCordinate;
        YCordinate = btnMenu.frame.origin.y + btnMenu.frame.size.height + MarginY;
        XCordinate = MarginX;
    }
}
[pool release];
}

А затем установите свой размер содержимого прокрутки

scrollView.contentSize = CGSizeMake(XPosition, YCordinate);

Когда кто-то одним нажатием на любое изображение попадает в событие ниже.

-(IBAction)btnSelected:(id)sender{
UIButton *btnSelected = sender;
switch (btnSelected.tag) {
}

Дайте мне знать, если я что-то пропущу и если вы не понимаете ... Надеюсь, что это поможет.

1 голос
/ 22 июля 2011

Вы можете добавить UITapGestureRecognizer к каждому изображению:

UITapGestureRecognizer *tapGesture = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)] autorelease];
[imageView addGestureRecognizer:tapGesture];
[self.view addSubview:imageView];
0 голосов
/ 22 июля 2011

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

button = [UIButton buttonWithType:UIButtonTypeCustom];

Google, как создать uibutton программно. Затем вы можете добавить необходимые селекторы для обработки событий нажатия кнопок.

В качестве альтернативы вы можете создать элемент в Interfacebuilder. Пользовательский класс, который имеет uiimageview и clear uibutton. Затем вы можете использовать этот элемент для добавления в свой uiscrollview.

...