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 id dataSource;
[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 );
}
}