5. Π§ΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠΈΡΡ Π²ΠΈΠ΄Ρ Π²Π΅ΡΡ Π½ΠΈΡ ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ collectionView: viewForSupplementaryElementOfKind: atIndexPath: ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π° Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, dequeueReusableSupplementaryViewOfKind: withReuseIdentifier: forIndexPath:, ΡΡΠΎΠ±Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π°.
6. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ² Π΄Π»Ρ Π²Π΅ΡΡ Π½ΠΈΡ ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ² Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ headerReferenceSize ΠΈ footerReferenceSize ΠΌΠ°ΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π³ΠΎ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ. xib-ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΡ Π½ΠΈΡ ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ². ΠΠ°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ Header.xib ΠΈ Footer.xib. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΡ ΠΏΠΎ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 5.5, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ Π±ΡΠ΄Ρ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π·Π΄Π΅ΡΡ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π». Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈ Π΄Π»Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ Π΄Π»Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ Objective-C. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Header ΠΈ Footer. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΠΎΠ±Π° ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ»Π΅Π΄ΡΡΡ ΠΎΡ UICollectionReusableView. ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ² Ρ ΡΡΠΈΠΌ, ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠΉΡΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ, Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» Header, Π° ΠΊΠ½ΠΎΠΏΠΊΡ β Π² ΡΠ°ΠΉΠ» Footer. Π‘Π²ΡΠΆΠΈΡΠ΅ ΠΈΡ Ρ Π²Π°ΡΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 5.10 ΠΈ 5.11.
Π ΠΈΡ. 5.10. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° Π΄Π»Ρ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
Π ΠΈΡ. 5.11. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° Π΄Π»Ρ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
Π― ΡΠ²ΡΠ·Π°Π» ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Header Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π°ΡΡΠ»Π΅ΡΠ°[4] Π² ΡΠ°ΠΉΠ»Π΅ Header.h. ΠΠ°Π·ΠΎΠ²Π΅ΠΌ Π°ΡΡΠ»Π΅Ρ ΠΏΡΠΎΡΡΠΎ label:
#import <UIKit/UIKit.h>
@interface Header: UICollectionReusableView
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ Π΄Π΅Π»Π°Ρ ΠΈ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π΅, ΡΠ²ΡΠ·Π°Π² ΠΊΠ½ΠΎΠΏΠΊΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Footer.xib Ρ Π°ΡΡΠ»Π΅ΡΠΎΠΌ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Footer.h ΠΈ Π½Π°Π·Π²Π°Π² Π°ΡΡΠ»Π΅Ρ button:
#import <UIKit/UIKit.h>
@interface Footer: UICollectionReusableView
@property (weak, nonatomic) IBOutlet UIButton *button;
@end
Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π΄Π»Ρ ΡΡΠ΅Π΅ΠΊ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ²:
#import Β«ViewController.hΒ»
#import Β«MyCollectionViewCell.hΒ»
#import Β«Header.hΒ»
#import Β«Footer.hΒ»
static NSString *kCollectionViewCellIdentifier = @"Cells";
static NSString *kCollectionViewHeaderIdentifier = @"Headers";
static NSString *kCollectionViewFooterIdentifier = @"Footers";
@implementation ViewController
β¦
ΠΠ°Π»Π΅Π΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅-ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ΅ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠ΅ΠΉΠΊΡ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΡΡΠ΅ΠΉΠΊΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° ΠΈ ΡΡΠ΅ΠΉΠΊΡ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ nib-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΡ:
β (instancetype) initWithCollectionViewLayout:(UICollectionViewLayout *)layout{
self = [super initWithCollectionViewLayout: layout];
if (self!= nil){
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ nib-ΡΠ°ΠΉΠ» ΡΠΎ ΡΠ±ΠΎΡΠ½ΡΠΌ Π²ΠΈΠ΄ΠΎΠΌ Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ */
UINib *nib = [UINib nibWithNibName:
NSStringFromClass([MyCollectionViewCell class])
bundle: [NSBundle mainBundle]];
[self.collectionView registerNib: nib
forCellWithReuseIdentifier: kCollectionViewCellIdentifier];
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ nib-ΡΠ°ΠΉΠ» Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° */
UINib *headerNib = [UINib
nibWithNibName: NSStringFromClass([Header class])
bundle: [NSBundle mainBundle]];
[self.collectionView registerNib: headerNib
forSupplementaryViewOfKind: UICollectionElementKindSectionHeader
withReuseIdentifier: kCollectionViewHeaderIdentifier];
/* Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ nib-ΡΠ°ΠΉΠ» Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π° */
UINib *footerNib = [UINib
nibWithNibName: NSStringFromClass([Footer class])
bundle: [NSBundle mainBundle]];
[self.collectionView registerNib: footerNib
forSupplementaryViewOfKind: UICollectionElementKindSectionFooter
withReuseIdentifier: kCollectionViewFooterIdentifier];
}
return self;
}
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° collectionView: viewForSupplemen taryElementOfKind: atIndexPath: ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½ΡΠΆΠ΅Π½ Π½Π°ΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π΅ΡΡ Π½ΠΈΡ ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠ±ΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ:
β (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSString *)kind
atIndexPath:(NSIndexPath *)indexPath{
NSString *reuseIdentifier = kCollectionViewHeaderIdentifier;
if ([kind isEqualToString: UICollectionElementKindSectionFooter]){
reuseIdentifier = kCollectionViewFooterIdentifier;
}
UICollectionReusableView *view =
[collectionView dequeueReusableSupplementaryViewOfKind: kind
withReuseIdentifier: reuseIdentifier
forIndexPath: indexPath];
if ([kind isEqualToString: UICollectionElementKindSectionHeader]){
Header *header = (Header *)view;
header.label.text = [NSString stringWithFormat:@"Section Header %lu",
(unsigned long)indexPath.section + 1];
}
else if ([kind isEqualToString: UICollectionElementKindSectionFooter]){
Footer *footer = (Footer *)view;
NSString *title = [NSString stringWithFormat:@"Section Footer %lu",
(unsigned long)indexPath.section + 1];
[footer.button setTitle: title forState: UIControlStateNormal];
}
return view;
}
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΠ°ΠΊΠ΅ΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΊΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»ΠΎΠ². ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 5.3, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ flowLayout Π΄Π΅Π»Π΅Π³Π°ΡΠ° Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β (UICollectionViewFlowLayout *) flowLayout{
UICollectionViewFlowLayout *flowLayout =
[[UICollectionViewFlowLayout alloc] init];
flowLayout.minimumLineSpacing = 20.0f;
flowLayout.minimumInteritemSpacing = 10.0f;
flowLayout.itemSize = CGSizeMake(80.0f, 120.0f);
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
flowLayout.sectionInset = UIEdgeInsetsMake(10.0f, 20.0f, 10.0f, 20.0f);
/* ΠΠ°Π΄Π°Π΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π»Ρ Π²ΠΈΠ΄ΠΎΠ² Ρ Π²Π΅ΡΡ Π½ΠΈΠΌΠΈ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Π°ΠΌΠΈ */
flowLayout.headerReferenceSize = CGSizeMake(300.0f, 50.0f);
flowLayout.footerReferenceSize = CGSizeMake(300.0f, 50.0f);
return flowLayout;
}
ΠΡΠ°ΠΊ, Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ! ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ iPad, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 5.12.
Π ΠΈΡ. 5.12. ΠΠ΅ΡΡ Π½ΠΈΠ΅ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΡΠΈΡΡΠ»Ρ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 5.2, 5.3, 5.5.
5.8. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΊ ΡΠ±ΠΎΡΠ½ΡΠΌ Π²ΠΈΠ΄Π°ΠΌ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΡΠ±ΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΆΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠΈΠΏΠΎΠΊ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ½ΡΡΠ°Π½ΡΠΈΡΡΠΉΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΆΠ΅ΡΡΠΎΠ², Π° ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΠΈ ΠΆΠ΅ΡΡΠΎΠ², ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½Π΅Ρ Π»ΠΈ ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π½ΡΠΆΠ½ΡΠΉ Π²Π°ΠΌ. ΠΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π² Π½Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ requireGestureRecognizerToFail: ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π²Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ². Π’Π°ΠΊ Π²Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΠΉ ΡΠΎΡ, ΡΡΠΎ Π½ΡΠΆΠ΅Π½ Π²Π°ΠΌ, Π±ΡΠ΄Π΅Ρ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΆΠ΅ΡΡΠΎΠ². ΠΡΠΎ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ΅ΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ/ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΆΠ΅ΡΡ, ΠΎΠ½ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΆΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ, ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅ΠΌΡΡΡ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ°ΠΌ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΡ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²Π°Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΠΊ ΡΠ±ΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ. ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ UICollectionViewController ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° collectionView, Π° Π½Π΅ ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ view.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π API iOS ΡΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΆΠ΅ΡΡΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π² ΡΠ±ΠΎΡΠ½ΡΡ Π²ΠΈΠ΄Π°Ρ . ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Π΅ΠΉ ΠΆΠ΅ΡΡΠΎΠ² ΠΊ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΡΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΠΈ ΠΆΠ΅ΡΡΠΎΠ² Π½Π΅ Π±ΡΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Ρ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΠΈ ΠΆΠ΅ΡΡΠΎΠ², Π° ΠΏΠΎΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΠ°Π½Π΅Π΅, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΠΊΠΈΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Ρ ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ requireGestureRecognizerToFail: Π² ΠΊΠ»Π°ΡΡΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΈ Π½Π°Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΡΠ±ΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΡΠ±ΠΎΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (ΡΠΎ Π΅ΡΡΡ Π΅Π³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ). ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΡΠΎΠ΅Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 5.5. ΠΡΠ°ΠΊ, ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠΊΠΎΠ² Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Π΅ΠΉ ΠΆΠ΅ΡΡΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π² ΡΠ±ΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ viewDidLoad ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΡΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°: