2016-04-05 3 views
1

Я хочу отображать несколько изображений в контроллере вида с помощью iCarousel.
iCarousel не показывает мои объекты изображения C

я перечислить все мои изображения в NSMutableArray фото,
, а затем я назвал массив фотографии в методе iCarousel viewForItemAtIndex.

Я следил за некоторыми учебниками, но по-прежнему не работает. , пожалуйста, помогите мне.

вот мой .m код

#import "TestController.h" 

@interface TestController() <UIActionSheetDelegate> 

@property (nonatomic, retain) NSMutableArray *foto; 


@end 


@implementation TestController 


@synthesize carousel; 
@synthesize foto; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     foto = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"Seleb1.jpg"], 
        [UIImage imageNamed:@"Seleb2.jpg"], 
        [UIImage imageNamed:@"Seleb3.jpg"], 
        nil]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 

    carousel.delegate = nil; 
    carousel.dataSource = nil; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    carousel.type = iCarouselTypeCoverFlow2; 

} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 

    self.carousel = nil; 
} 


#pragma mark - 
#pragma mark iCarousel methods 

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
{ 
    return [foto count]; 
} 



- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 
    view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[foto objectAtIndex:index]]]; 
    return view; 
} 

@end 

может кто-то мне помочь? Что случилось с моим кодом?

Обновленный код

#import "TestController.h" 

@interface TestController() 

@property (nonatomic, retain) NSArray *foto; 


@end 


@implementation TestController 


@synthesize carousel; 
@synthesize foto; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     foto = [NSArray arrayWithObjects: 
       @"Seleb1.jpg", 
       @"Seleb2.jpg", 
       @"Seleb3.jpg", 
       nil]; 
    } 
    return self; 

} 

- (void)dealloc 
{ 

    carousel.delegate = nil; 
    carousel.dataSource = nil; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    carousel.type = iCarouselTypeCoverFlow2; 
    [carousel reloadData]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 

    self.carousel = nil; 

} 


#pragma mark - 
#pragma mark iCarousel methods 

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
{ 
    return [foto count]; 
} 


- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view { 

    view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 200.0f)]; // set the frame for your Image 

    UIImage *image = [UIImage imageNamed:[foto objectAtIndex:index]]; 
    ((UIImageView *)view).image = image; 

    return view; 

} 

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option   withDefault:(CGFloat)value 
{ 
    //customize carousel display 

    return value+0.1; 
} 

@end 
+0

Вы не настройки Делегирование iCarousel, ни DataSource к вашему ViewController. –

+0

@TomKnapen: где я должен его установить? если он находится на доске объявлений, я уже установил его. в TestController.h, я тоже установил здесь свой код .h: TestController: UIViewController Shasapo

+0

В таком случае вы не должны вызывать '[carousel reloadData]' (например, в вашем 'viewDidLoad')? –

ответ

0

я исправить мой код, объединив весь свой ответ, большое спасибо так много. вот мой новый код:

#import "TestController.h" 

@interface TestController() 

@property (nonatomic, retain) NSArray *foto; 


@end 


@implementation TestController 


@synthesize carousel; 
@synthesize foto; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 

    } 
    return self; 

} 

- (void)dealloc 
{ 

    carousel.delegate = nil; 
    carousel.dataSource = nil; 
} 
- (void)viewDidLoad 
{ 
    carousel.delegate = self; 

    carousel.dataSource = self; 
    foto = [NSArray arrayWithObjects: 
        @"Seleb1.jpg", 
        @"Seleb2.jpg", 
        @"Seleb3.jpg", 
        nil]; 


    [super viewDidLoad]; 
    carousel.type = iCarouselTypeCoverFlow2; 
    [carousel reloadData]; 


} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 

    self.carousel = nil; 

} 


#pragma mark - 
#pragma mark iCarousel methods 

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel 
{ 
    NSLog(@"%lu",(unsigned long)foto.count); 
    return [foto count]; 
} 


- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view { 

    view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 200.0f)]; // set the frame for your Image 

    UIImage *image = [UIImage imageNamed:[foto objectAtIndex:index]]; 
    ((UIImageView *)view).image = image; 

    return view; 

} 

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option   withDefault:(CGFloat)value 
{ 
    //customize carousel display 

    return value+0.1; 
} 

@end 

Спасибо вам большое за ваш ответ, я действительно ценю это :)

1

изменение этой линии

view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[foto objectAtIndex:index]]]; 

в

Причина: Вы уже определили свой массив в качестве [UIImage imageNamed:@"Seleb1.jpg"], поэтому здесь вам нужно позвонить непосредственно подобные

view = [[UIImageView alloc] initWithImage:[foto objectAtIndex:index]]; 

Choice-2

создать массив как

foto = [NSArray arrayWithObjects: 
       @"Seleb1.jpg", 
       @"Seleb2.jpg", 
       @"Seleb3.jpg", 
       nil]; 

и называют как

view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[foto objectAtIndex:index]]]; 

, если вам нужно

нас е это

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
carousel.type = iCarouselTypeCoverFlow2; 
[carousel reloadData]; 
} 

Update ответ

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view { 

    view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 200.0f)]; // set the frame for your Image 

      UIImage *image = [UIImage imageNamed:[foto objectAtIndex:index]]; 
     ((UIImageView *)view).image = image; 

     return view; 

} 
+1

Хороший улов, но я думаю, что это должно быть дополнено '[carousel reloadData]' –

+0

@TomKnapen - я думаю, не нужно из этого здесь, но если мы будем использовать его, будет полезно –

+0

@TomKnapen - tanx buddy –

0

@TomKnapen: где я должен установить? если он находится на доске объявлений, у меня есть . в TestController.h, я поставил его тоже вот мой код в .h: TestController: UIViewController - Shasapo

Я не уверен, о том, как вы устанавливаете его в раскадровке, но в коде, не устанавливают делегата. В этой строке не установлен делегат TestController : UIViewController <iCarouselDataSource,iCarouselDelegate>, что он делает, так это то, что контроллер, который является TestController, в этом случае соответствует протоколу iCarouselDelegate. То, что вы должны сделать, это явно установить делегат и источник данных в viewDidLoad, например, то есть

каруселью.delegate = self;

carousel.datasource = self;

2 - попробуйте сначала отладить эти методы делегата. Начните с метода nimberOfItems, проверьте, нет ли foto array is no nil. Затем в режиме viewForItem проверьте, не возвращено ли изображение, которое вы возвращаете. Поскольку вы используете раскадровку, ваш метод initWithNibName не будет вызван, поэтому я думаю, что вы не хотите инициализировать массив фото. На мой взгляд, ваш метод numberofitems возвращает 0. Попробуйте поставить точку останова на этот метод и посмотреть или просто добавить инструкцию NSLog и проверить, не является ли foto array is not nil

3 - Вы не добавляете представление iCarousel к вашему представлению.

Я использовал эту схему в прошлом, так что я решил включить фрагмент кода я реализовал

#pragma mark - 
#pragma mark iCarousel methods 

- (void)iCarouselSetup { 
    self.view.backgroundColor = kAppColor; 

    self.carousel = [[iCarousel alloc] initWithFrame:CGRectMake(0, calendarBar.bottom + 10, self.view.width, self.view.height)]; 
    [self.view addSubview:self.carousel]; 

    self.carousel.delegate = self; 
    self.carousel.dataSource = self; 
    self.carousel.type = iCarouselTypeCoverFlow; 
    self.carousel.scrollEnabled = NO; 
    [self.carousel scrollToItemAtIndex:2 animated:NO]; 

    self.currentProjectsTableview = (UITableView*)[self.carousel currentItemView]; } 

- (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel { 
    return 5; } 

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view { 
    self.projectsTableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) style:UITableViewStylePlain]; 
    self.projectsTableview.x = 0; 
    self.projectsTableview.y = calendarBar.bottom; 
    self.projectsTableview.width = [ASize screenWidth]; 
    self.projectsTableview.height = [ASize screenHeight] - 180; 
    self.projectsTableview.contentInset = UIEdgeInsetsMake(0, 0, 100, 0); 
    self.projectsTableview.backgroundColor = [UIColor fromRGB:0xF8F8F8]; 
    self.projectsTableview.separatorStyle = UITableViewCellSeparatorStyleNone; 
    self.projectsTableview.dataSource = self; 
    self.projectsTableview.delegate = self; 
    self.projectsTableview.tag = tableTag++; 

    return self.projectsTableview; } 

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index { 
    self.carousel.scrollEnabled = NO; 
    [AppDelegate getDelegate].deckController.panningMode = IIViewDeckFullViewPanning; 

    [UIView animateWithDuration:0.3 animations:^{ 
     for (int i = 0; i < self.carousel.numberOfItems; i++) 
     { 
      [self.carousel itemViewAtIndex:i].transform = CGAffineTransformMakeScale(1.1f, 1.1f); 
     } 
    }completion:^(BOOL finished) { 
     [UIView animateWithDuration:0.2 animations:^{ 
      for (int i = 0; i < self.carousel.numberOfItems; i++) 
      { 
       [self.carousel itemViewAtIndex:i].transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
       [self.carousel itemViewAtIndex:i].userInteractionEnabled = YES; 
      } 
     } ]; 
     tableMinimized = NO; 
    }]; 

    self.currentProjectsTableview = (UITableView*)[carousel itemViewAtIndex:index]; } 

- (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel { 
    [navButton setTitle:self.projectDates[self.carousel.currentItemIndex] forState:UIControlStateNormal]; } 
+0

Я попробовал, но изображение все еще не показывает :( – Shasapo

+0

попробуйте сначала отладить эти методы делегата. Начните с метода nimberOfItems, проверьте, нет ли foto array is no nil. Затем в методе viewForItem проверьте, нет ли возвращаемого изображения – macL0vin

+1

Поскольку вы используете раскадровку, ваш метод initWithNibName не будет вызван, поэтому я думаю, что вы не хотите инициализировать массив фото. По-моему, ваш метод numberofitems возвращает 0. Попробуйте поместите точку останова в этот метод и посмотрите или просто добавьте инструкцию NSLog и проверьте, не является ли foto array is not nil – macL0vin

Смежные вопросы