// // iCarousel.h // // Version 1.8.3 // // Created by Nick Lockwood on 01/04/2011. // Copyright 2011 Charcoal Design // // Distributed under the permissive zlib License // Get the latest version from here: // // https://github.com/nicklockwood/iCarousel // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would be // appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be // misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. // #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunknown-pragmas" #pragma clang diagnostic ignored "-Wreserved-id-macro" #pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" #import #undef weak_delegate #undef __weak_delegate #if __has_feature(objc_arc) && __has_feature(objc_arc_weak) && \ (!(defined __MAC_OS_X_VERSION_MIN_REQUIRED) || \ __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8) #define weak_delegate weak #else #define weak_delegate unsafe_unretained #endif #import #if defined USING_CHAMELEON || defined __IPHONE_OS_VERSION_MAX_ALLOWED #define ICAROUSEL_IOS #else #define ICAROUSEL_MACOS #endif #ifdef ICAROUSEL_IOS #import #else #import typedef NSView UIView; #endif typedef NS_ENUM(NSInteger, iCarouselType) { iCarouselTypeLinear = 0, iCarouselTypeRotary, iCarouselTypeInvertedRotary, iCarouselTypeCylinder, iCarouselTypeInvertedCylinder, iCarouselTypeWheel, iCarouselTypeInvertedWheel, iCarouselTypeCoverFlow, iCarouselTypeCoverFlow2, iCarouselTypeTimeMachine, iCarouselTypeInvertedTimeMachine, iCarouselTypeCustom }; typedef NS_ENUM(NSInteger, iCarouselOption) { iCarouselOptionWrap = 0, iCarouselOptionShowBackfaces, iCarouselOptionOffsetMultiplier, iCarouselOptionVisibleItems, iCarouselOptionCount, iCarouselOptionArc, iCarouselOptionAngle, iCarouselOptionRadius, iCarouselOptionTilt, iCarouselOptionSpacing, iCarouselOptionFadeMin, iCarouselOptionFadeMax, iCarouselOptionFadeRange, iCarouselOptionFadeMinAlpha }; NS_ASSUME_NONNULL_BEGIN @protocol iCarouselDataSource, iCarouselDelegate; @interface iCarousel : UIView @property (nonatomic, weak_delegate) IBOutlet __nullable id dataSource; @property (nonatomic, weak_delegate) IBOutlet __nullable id delegate; @property (nonatomic, assign) iCarouselType type; @property (nonatomic, assign) CGFloat perspective; @property (nonatomic, assign) CGFloat decelerationRate; @property (nonatomic, assign) CGFloat scrollSpeed; @property (nonatomic, assign) CGFloat bounceDistance; @property (nonatomic, assign, getter = isScrollEnabled) BOOL scrollEnabled; @property (nonatomic, assign, getter = isPagingEnabled) BOOL pagingEnabled; @property (nonatomic, assign, getter = isVertical) BOOL vertical; @property (nonatomic, readonly, getter = isWrapEnabled) BOOL wrapEnabled; @property (nonatomic, assign) BOOL bounces; @property (nonatomic, assign) CGFloat scrollOffset; @property (nonatomic, readonly) CGFloat offsetMultiplier; @property (nonatomic, assign) CGSize contentOffset; @property (nonatomic, assign) CGSize viewpointOffset; @property (nonatomic, readonly) NSInteger numberOfItems; @property (nonatomic, readonly) NSInteger numberOfPlaceholders; @property (nonatomic, assign) NSInteger currentItemIndex; @property (nonatomic, strong, readonly) UIView * __nullable currentItemView; @property (nonatomic, strong, readonly) NSArray *indexesForVisibleItems; @property (nonatomic, readonly) NSInteger numberOfVisibleItems; @property (nonatomic, strong, readonly) NSArray *visibleItemViews; @property (nonatomic, readonly) CGFloat itemWidth; @property (nonatomic, strong, readonly) UIView *contentView; @property (nonatomic, readonly) CGFloat toggle; @property (nonatomic, assign) CGFloat autoscroll; @property (nonatomic, assign) BOOL stopAtItemBoundary; @property (nonatomic, assign) BOOL scrollToItemBoundary; @property (nonatomic, assign) BOOL ignorePerpendicularSwipes; @property (nonatomic, assign) BOOL centerItemWhenSelected; @property (nonatomic, readonly, getter = isDragging) BOOL dragging; @property (nonatomic, readonly, getter = isDecelerating) BOOL decelerating; @property (nonatomic, readonly, getter = isScrolling) BOOL scrolling; - (void)scrollByOffset:(CGFloat)offset duration:(NSTimeInterval)duration; - (void)scrollToOffset:(CGFloat)offset duration:(NSTimeInterval)duration; - (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration; - (void)scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration; - (void)scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (nullable UIView *)itemViewAtIndex:(NSInteger)index; - (NSInteger)indexOfItemView:(UIView *)view; - (NSInteger)indexOfItemViewOrSubview:(UIView *)view; - (CGFloat)offsetForItemAtIndex:(NSInteger)index; - (nullable UIView *)itemViewAtPoint:(CGPoint)point; - (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)reloadData; @end @protocol iCarouselDataSource - (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel; - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(nullable UIView *)view; @optional - (NSInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel; - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSInteger)index reusingView:(nullable UIView *)view; @end @protocol iCarouselDelegate @optional - (void)carouselWillBeginScrollingAnimation:(iCarousel *)carousel; - (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel; - (void)carouselDidScroll:(iCarousel *)carousel; - (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel; - (void)carouselWillBeginDragging:(iCarousel *)carousel; - (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate; - (void)carouselWillBeginDecelerating:(iCarousel *)carousel; - (void)carouselDidEndDecelerating:(iCarousel *)carousel; - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index; - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index; - (CGFloat)carouselItemWidth:(iCarousel *)carousel; - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform; - (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value; @end NS_ASSUME_NONNULL_END #pragma clang diagnostic pop