Objective-c header file:
C# ApiDefinition.cs file:
#ifndef AH_RETAIN #if __has_feature(objc_arc) #define AH_RETAIN(x) x #define AH_RELEASE(x) #define AH_AUTORELEASE(x) x #define AH_SUPER_DEALLOC #else #define __AH_WEAK #define AH_WEAK assign #define AH_RETAIN(x) [x retain] #define AH_RELEASE(x) [x release] #define AH_AUTORELEASE(x) [x autorelease] #define AH_SUPER_DEALLOC [super dealloc] #endif #endif // Weak reference support #ifndef AH_WEAK #if defined __IPHONE_OS_VERSION_MIN_REQUIRED #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 #define __AH_WEAK __weak #define AH_WEAK weak #else #define __AH_WEAK __unsafe_unretained #define AH_WEAK unsafe_unretained #endif #elif defined __MAC_OS_X_VERSION_MIN_REQUIRED #if __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6 #define __AH_WEAK __weak #define AH_WEAK weak #else #define __AH_WEAK __unsafe_unretained #define AH_WEAK unsafe_unretained #endif #endif #endif // ARC Helper ends #ifdef USING_CHAMELEON #define ICAROUSEL_IOS #elif defined __IPHONE_OS_VERSION_MAX_ALLOWED #define ICAROUSEL_IOS typedef CGRect NSRect; typedef CGSize NSSize; #else #define ICAROUSEL_MACOS #endif #import#ifdef ICAROUSEL_IOS #import #else #import typedef NSView UIView; #endif typedef enum { iCarouselTypeLinear = 0, iCarouselTypeRotary, iCarouselTypeInvertedRotary, iCarouselTypeCylinder, iCarouselTypeInvertedCylinder, iCarouselTypeWheel, iCarouselTypeInvertedWheel, iCarouselTypeCoverFlow, iCarouselTypeCoverFlow2, iCarouselTypeTimeMachine, iCarouselTypeInvertedTimeMachine, iCarouselTypeCustom } iCarouselType; typedef enum { iCarouselTranformOptionCount = 0, iCarouselTranformOptionArc, iCarouselTranformOptionAngle, iCarouselTranformOptionRadius, iCarouselTranformOptionTilt, iCarouselTranformOptionSpacing } iCarouselTranformOption; @protocol iCarouselDataSource, iCarouselDelegate; @interface iCarousel : UIView //required for 32-bit Macs #ifdef __i386__ { @private id __AH_WEAK delegate; id __AH_WEAK dataSource; iCarouselType type; CGFloat perspective; NSInteger numberOfItems; NSInteger numberOfPlaceholders; NSInteger numberOfPlaceholdersToShow; NSInteger numberOfVisibleItems; UIView *contentView; NSDictionary *itemViews; NSMutableSet *itemViewPool; NSMutableSet *placeholderViewPool; NSInteger previousItemIndex; CGFloat itemWidth; CGFloat scrollOffset; CGFloat offsetMultiplier; CGFloat startVelocity; id __unsafe_unretained timer; BOOL decelerating; BOOL scrollEnabled; CGFloat decelerationRate; BOOL bounces; CGSize contentOffset; CGSize viewpointOffset; CGFloat startOffset; CGFloat endOffset; NSTimeInterval scrollDuration; NSTimeInterval startTime; BOOL scrolling; CGFloat previousTranslation; BOOL centerItemWhenSelected; BOOL shouldWrap; BOOL dragging; BOOL didDrag; CGFloat scrollSpeed; CGFloat bounceDistance; NSTimeInterval toggleTime; CGFloat toggle; BOOL stopAtItemBoundary; BOOL scrollToItemBoundary; BOOL useDisplayLink; BOOL vertical; BOOL ignorePerpendicularSwipes; } #endif @property (nonatomic, AH_WEAK) IBOutlet id dataSource; @property (nonatomic, AH_WEAK) IBOutlet 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) BOOL scrollEnabled; @property (nonatomic, assign) BOOL bounces; @property (nonatomic, readonly) 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, readonly) NSInteger currentItemIndex; @property (nonatomic, strong, readonly) UIView *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) BOOL stopAtItemBoundary; @property (nonatomic, assign) BOOL scrollToItemBoundary; @property (nonatomic, assign) BOOL useDisplayLink; @property (nonatomic, assign, getter = isVertical) BOOL vertical; @property (nonatomic, assign) BOOL ignorePerpendicularSwipes; - (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration; - (void)scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration; - (void)scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated; - (UIView *)itemViewAtIndex:(NSInteger)index; - (NSInteger)indexOfItemView:(UIView *)view; - (NSInteger)indexOfItemViewOrSubview:(UIView *)view; - (void)reloadData; #ifdef ICAROUSEL_IOS @property (nonatomic, assign) BOOL centerItemWhenSelected; #endif @end @protocol iCarouselDataSource - (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel; - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view; @optional - (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel; - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view; - (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel; //deprecated, use carousel:viewForItemAtIndex:reusingView: and carousel:placeholderViewAtIndex:reusingView: instead - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index __deprecated; - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index __deprecated; @end @protocol iCarouselDelegate @optional - (void)carouselWillBeginScrollingAnimation:(iCarousel *)carousel; - (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel; - (void)carouselDidScroll:(iCarousel *)carousel; - (void)carouselCurrentItemIndexUpdated:(iCarousel *)carousel; - (void)carouselWillBeginDragging:(iCarousel *)carousel; - (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate; - (void)carouselWillBeginDecelerating:(iCarousel *)carousel; - (void)carouselDidEndDecelerating:(iCarousel *)carousel; - (CGFloat)carouselItemWidth:(iCarousel *)carousel; - (CGFloat)carouselOffsetMultiplier:(iCarousel *)carousel; - (BOOL)carouselShouldWrap:(iCarousel *)carousel; - (CGFloat)carousel:(iCarousel *)carousel itemAlphaForOffset:(CGFloat)offset; - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform; - (CGFloat)carousel:(iCarousel *)carousel valueForTransformOption:(iCarouselTranformOption)option withDefault:(CGFloat)value; //deprecated, use transformForItemAtIndex:withOffset:baseTransform: instead - (CATransform3D)carousel:(iCarousel *)carousel transformForItemView:(UIView *)view withOffset:(CGFloat)offset __deprecated; #ifdef ICAROUSEL_IOS - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index; - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index; #endif @end
C# ApiDefinition.cs file:
using System; using System.Drawing; using MonoTouch.Foundation; using MonoTouch.ObjCRuntime; using MonoTouch.UIKit; using MonoTouch.CoreGraphics; using System.Collections.Generic; using MonoTouch.CoreAnimation; namespace iCarouselSharp { [BaseType (typeof (UIView))] interface iCarousel { [Export ("initWithFrame:")] IntPtr Constructor (RectangleF frame); //@property (nonatomic, AH_WEAK) IBOutlet iddataSource; [Export ("dataSource")] iCarouselDataSource DataSource { get; set; } //@property (nonatomic, AH_WEAK) IBOutlet id delegate; [Wrap ("WeakDelegate")] iCarouselDelegate Delegate { get; set; } //@property (nonatomic, AH_WEAK) IBOutlet id delegate; [Export ("delegate", ArgumentSemantic.Assign), NullAllowed] NSObject WeakDelegate { get; set; } //@property (nonatomic, assign) iCarouselType type; [Export ("type")] iCarouselType Type{ get; set; } /*@property (nonatomic, assign) CGFloat perspective;*/ [Export ("perspective")] float Perspective{ get; set; } /*@property (nonatomic, assign) CGFloat decelerationRate;*/ [Export ("decelerationRate")] float DecelerationRate{ get; set; } /*@property (nonatomic, assign) CGFloat scrollSpeed;*/ [Export ("scrollSpeed")] float ScrollSpeed{ get; set; } /*@property (nonatomic, assign) CGFloat bounceDistance;*/ [Export ("bounceDistance")] float BounceDistance{ get; set; } /*@property (nonatomic, assign) BOOL scrollEnabled;*/ [Export ("scrollEnabled")] bool ScrollEnabled{ get; set; } /*@property (nonatomic, assign) BOOL bounces;*/ [Export ("bounces")] bool Bounces{ get; set; } /*@property (nonatomic, readonly) CGFloat scrollOffset;*/ [Export ("scrollOffset")] float ScrollOffset{ get; } /*@property (nonatomic, readonly) CGFloat offsetMultiplier;*/ [Export ("offsetMultiplier")] float OffsetMultiplier{ get; } /*@property (nonatomic, assign) CGSize contentOffset;*/ [Export ("contentOffset")] SizeF ContentOffset{ get; } /*@property (nonatomic, assign) CGSize viewpointOffset;*/ [Export ("viewpointOffset")] SizeF ViewpointOffset{ get; set; } /*@property (nonatomic, readonly) NSInteger numberOfItems;*/ [Export ("numberOfItems")] int NumberOfItems{ get; } // @property (nonatomic, readonly) NSInteger numberOfPlaceholders; [Export ("numberOfPlaceholders")] int NumberOfPlaceholders{ get; } // @property (nonatomic, readonly) NSInteger currentItemIndex; //! [Export ("currentItemIndex")] int CurrentItemIndex{ get; } // @property (nonatomic, strong, readonly) UIView *currentItemView; //! [Export ("currentItemView")] int CurrentItemView{ get; } // @property (nonatomic, strong, readonly) NSArray *indexesForVisibleItems; //! [Export ("indexesForVisibleItems")] NSArray IndexesForVisibleItems{ get; } // @property (nonatomic, readonly) NSInteger numberOfVisibleItems; [Export ("numberOfVisibleItems")] int NumberOfVisibleItems{ get; } // @property (nonatomic, strong, readonly) NSArray *visibleItemViews; //! [Export ("visibleItemViews")] UIView[] VisibleItemViews{ get; } // @property (nonatomic, readonly) CGFloat itemWidth; [Export ("itemWidth")] float ItemWidth{ get; } // @property (nonatomic, strong, readonly) UIView *contentView; [Export ("contentView")] UIView VontentView{ get; } // @property (nonatomic, readonly) CGFloat toggle; [Export ("toggle")] float Toggle{ get; } // @property (nonatomic, assign) BOOL stopAtItemBoundary; [Export ("stopAtItemBoundary")] bool StopAtItemBoundary{ get; set; } // @property (nonatomic, assign) BOOL scrollToItemBoundary; [Export ("scrollToItemBoundary")] bool ScrollToItemBoundary{ get; set; } // @property (nonatomic, assign) BOOL useDisplayLink; [Export ("useDisplayLink")] bool UseDisplayLink{ get; set; } // @property (nonatomic, assign, getter = isVertical) BOOL vertical; [Export ("vertical")] bool Vertical{ [Bind ("isVertical")]get; set; } // @property (nonatomic, assign) BOOL ignorePerpendicularSwipes; [Export ("ignorePerpendicularSwipes")] bool IgnorePerpendicularSwipes{ get; set; } // @property (nonatomic, assign) BOOL centerItemWhenSelected; [Export ("centerItemWhenSelected")] bool CenterItemWhenSelected{ get; set; } // - (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration; [Export ("scrollByNumberOfItems:itemCount:duration:")] void scrollByNumberOfItems( int itemCount, double duration ); // - (void)scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration; [Export ("scrollToItemAtIndex:index:duration:")] void scrollToItemAtIndex( int index, double duration ); // - (void)scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated; [Export ("scrollToItemAtIndex:index:animated:")] void scrollToItemAtIndex( int index, bool animated ); // - (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated; [Export ("removeItemAtIndex:index:animated:")] void removeItemAtIndex( int index, bool animated ); // - (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated; [Export ("insertItemAtIndex:index:animated:")] void insertItemAtIndex( int index, bool animated ); // - (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated; [Export ("reloadItemAtIndex:index:animated:")] void reloadItemAtIndex( int index, bool animated ); // - (UIView *)itemViewAtIndex:(NSInteger)index; [Export ("itemViewAtIndex:")] UIView itemViewAtIndex( int index ); // - (NSInteger)indexOfItemView:(UIView *)view; [Export ("indexOfItemView:")] int indexOfItemView( UIView view ); // - (NSInteger)indexOfItemViewOrSubview:(UIView *)view; [Export ("indexOfItemViewOrSubview:")] int indexOfItemViewOrSubview( UIView view ); // - (void)reloadData; [Export ("reloadData")] void reloadData(); } [BaseType (typeof (NSObject))] [Model] interface iCarouselDataSource { // - (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel; [Export ("numberOfItemsInCarousel:")] int numberOfItemsInCarousel( iCarousel carousel ); // - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view; [Export ("carousel:viewForItemAtIndex:reusingView:")] UIView viewForItemAtIndex( iCarousel carousel, int index, UIView view ); // @optional // // - (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel; // - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view; //- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel; [Export ("numberOfVisibleItemsInCarousel:")] int numberOfVisibleItemsInCarousel( iCarousel carousel ); // // //deprecated, use carousel:viewForItemAtIndex:reusingView: and carousel:placeholderViewAtIndex:reusingView: instead // - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index __deprecated; // - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index __deprecated; } [BaseType (typeof (NSObject))] [Model] interface iCarouselDelegate { // - (void)carouselWillBeginScrollingAnimation:(iCarousel *)carousel; [Export ("carouselWillBeginScrollingAnimation:")] void WillBeginScrollingAnimation( iCarousel carousel ); // - (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel; [Export ("carouselDidEndScrollingAnimation:")] void DidEndScrollingAnimation( iCarousel carousel ); // - (void)carouselDidScroll:(iCarousel *)carousel; [Export ("carouselDidScroll:")] void DidScroll( iCarousel carousel ); // - (void)carouselCurrentItemIndexUpdated:(iCarousel *)carousel; [Export ("carouselCurrentItemIndexUpdated:")] void CurrentItemIndexUpdated( iCarousel carousel ); // - (void)carouselWillBeginDragging:(iCarousel *)carousel; [Export ("carouselWillBeginDragging:")] void WillBeginDragging( iCarousel carousel ); // - (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate; [Export ("carouselDidEndDragging:")] void DidEndDragging( iCarousel carousel ); // - (void)carouselWillBeginDecelerating:(iCarousel *)carousel; [Export ("carouselWillBeginDecelerating:")] void WillBeginDecelerating( iCarousel carousel ); // - (void)carouselDidEndDecelerating:(iCarousel *)carousel; [Export ("carouselDidEndDecelerating:")] void DidEndDecelerating( iCarousel carousel ); // - (CGFloat)carouselItemWidth:(iCarousel *)carousel; [Export ("carouselItemWidth:")] float ItemWidth( iCarousel carousel ); // - (CGFloat)carouselOffsetMultiplier:(iCarousel *)carousel; [Export ("carouselOffsetMultiplier:")] float OffsetMultiplier( iCarousel carousel ); // - (BOOL)carouselShouldWrap:(iCarousel *)carousel; [Export ("carouselShouldWrap:")] bool ShouldWrap( iCarousel carousel ); // - (CGFloat)carousel:(iCarousel *)carousel itemAlphaForOffset:(CGFloat)offset; [Export ("carousel:itemAlphaForOffset:")] float itemAlphaForOffset( iCarousel carousel, float offset ); // - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform; [Export ("carousel:itemTransformForOffset:baseTransform:")] CATransform3D carousel( iCarousel carousel, float offset, CATransform3D transform ); // - (CGFloat)carousel:(iCarousel *)carousel valueForTransformOption:(iCarouselTranformOption)option withDefault:(CGFloat)value; [Export ("carousel:valueForTransformOption:withDefault:")] float valueForTransformOption( iCarousel carousel, iCarouselTranformOption option, float withDefault ); // - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index; [Export ("carousel:shouldSelectItemAtIndex:")] bool shouldSelectItemAtIndex( iCarousel carousel, int index ); // - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index; [Export ("carousel:didSelectItemAtIndex:")] void didSelectItemAtIndex( iCarousel carousel, int index ); } }