【发布时间】:2014-04-24 23:48:01
【问题描述】:
我有一个collectionView 的照片,当点击照片时,它应该会显示该照片的详细视图。
问题是,我点击的第一张照片没有任何作用,然后每次点击后都会显示两次之前点击过的照片。
例如:
点按照片 1... 不执行任何操作。
点按照片 2... 显示照片 1。
点按照片 6... 显示照片 2。
感谢您的帮助!
ViewController.m
@property (nonatomic) NSArray *photos;
- (void)viewDidLoad
{
[super viewDidLoad];
[self.collectionView registerClass:[BlissPhotoCell class]
forCellWithReuseIdentifier:@"photo"];
NSURLSession *session = [NSURLSession sharedSession];
NSString *urlString = [[NSString alloc] initWithFormat:@"https://api.instagram.com/v1/;
NSURL *url = [[NSURL alloc]initWithString:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
NSString *text = [[NSString alloc] initWithContentsOfURL:location encoding:NSUTF8StringEncoding error:nil];
NSData *data = [[NSData alloc] initWithContentsOfURL:location];
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
self.photos = [responseDictionary valueForKeyPath:@"data"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
}];
[task resume];
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *photo = self.photos[indexPath.row];
BlissDetailViewController *viewController = [[BlissDetailViewController alloc] init];
viewController.modalPresentationStyle = UIModalPresentationCustom;
viewController.transitioningDelegate = self;
viewController.photo = photo;
[self presentViewController:viewController animated:YES completion:nil];
}
BlissPresentDetailTransition.h
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
UIViewController *detail = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *containerView = [transitionContext containerView];
detail.view.alpha = 0.0;
CGRect frame = containerView.bounds;
frame.origin.y += 20.0;
frame.size.height -= 20.0;
detail.view.frame = frame;
[containerView addSubview:detail.view];
[UIView animateWithDuration:0.3 animations:^{
detail.view.alpha = 1.0;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
return 0.3;
}
【问题讨论】:
-
如果您发布相关代码可能会有所帮助。设置手势识别器的代码在哪里,处理它的代码在哪里?
-
我添加了
didSelectItemAtIndexPath代码。那是你要找的吗?对此感到抱歉。 -
你的手势识别器的代码怎么样?
-
为了展示
BlissDetailViewController,我只使用didSelectItemAtIndexPath。所以我想也许它没有使用手势?只是我的自定义过渡?现在将发布我的自定义转换的代码。
标签: ios objective-c uicollectionview uitapgesturerecognizer