Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .github/workflows/create-nuget.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Build nuget package

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
build:
runs-on: macos-latest
env:
SDK: 17.5
SRC_FOLDER: .
# PROJ_NAME: SWRevealViewController.xcodeproj

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.x'
#
#
# - name: Build MBProgressHUD iphonesimulator Framework
# run: |
# xcodebuild -project ${{ env.SRC_FOLDER }}/${{ env.PROJ_NAME }} \
# -target "MBProgressHUD Framework" \
# -sdk iphonesimulator${{ env.SDK }} \
#
# - name: Build MBProgressHUD iphonesimulator Framework
# run: |
# xcodebuild -project ${{ env.SRC_FOLDER }}/${{ env.PROJ_NAME }} \
# -target "MBProgressHUD Framework" \
# -sdk iphoneos${{ env.SDK }} \
#
# - name: Build xcframework
# run: |
# xcodebuild -create-xcframework \
# -framework "${{ env.SRC_FOLDER }}/build/Release-iphonesimulator/MBProgressHUD.framework" \
# -framework "${{ env.SRC_FOLDER }}/build/Release-iphoneos/MBProgressHUD.framework" \
# -output ./dotnet-binding/MBProgressHUD.xcframework
#
# - name: Upload .xcframework as artifact
# uses: actions/upload-artifact@v4.6.2
# with:
# name: xcframework
# compression-level: '1'
# path: ./dotnet-binding/SWRevealViewController.xcframework
#
- name: Restore workload
working-directory: ./SWRevealViewController
run: dotnet workload restore

- name: Build .NET binding project
working-directory: ./SWRevealViewController
run: dotnet build -c Release SWRevealViewController.csproj

- name: Pack NuGet
working-directory: ./SWRevealViewController
run: dotnet pack -c Release SWRevealViewController.csproj

- name: Upload .nupkg as artifact
uses: actions/upload-artifact@v4.6.2
with:
name: SWRevealViewController-nuget-package
compression-level: '0'
path: SWRevealViewController/bin/Release/*.nupkg
43 changes: 41 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,41 @@
# SWRevealViewController-dotnet
.net bindings for the SWRevealViewController ios library
# Maui iOS binding for SWRevealViewController

[![NuGet version](https://badge.fury.io/nu/com.jonathanantoine.SWRevealViewController.svg)](https://badge.fury.io/nu/com.jonathanantoine.SWRevealViewController)

- Native library repository: [SWRevealViewController](https://github.com/John-Lluch/SWRevealViewController)

**Support Net 9.0 for iOS (works with Xcode 15 and iOS 17)**

## Nuget

* `Install-Package com.jonathanantoine.SWRevealViewController`
* <https://www.nuget.org/packages/com.jonathanantoine.SWRevealViewController>

## Compatibility
* Run on ios and ios simulator (arm64 + x86_64).

## Build
* Run the GitHub action to build the project


## Usage
Follow [this blog post to reference](https://medium.com/@jonathanantoine/how-to-add-a-local-nuget-nupkg-to-your-net-project-0254d222e2a6) it in your project if not yet published on Nuget.


```csharp
using SWRevealViewControllerMaui;

var pageController = new MyPageController();
pageController.ViewControllerSelected += pageControllerController_ViewControllerSelected;

var menuController = new MenuViewController();

var swRevealViewController = new SWRevealViewController(menuController, pageController);
```

## Contribution
Contribution to [ApiDefinition.cs](SWRevealViewController/ApiDefinition.cs) are welcome, just send PRs.




178 changes: 178 additions & 0 deletions SWRevealViewController/ApiDefinition.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
using System;
using CoreGraphics;
using Foundation;
using ObjCRuntime;
using System.Drawing;
using UIKit;

namespace SWRevealViewControllerMaui {

[BaseType (typeof (UIViewController))]
public partial interface SWRevealViewController
{
[Export ("initWithRearViewController:frontViewController:")]
IntPtr Constructor (UIViewController rearViewController, UIViewController frontViewController);

[Export ("rearViewController", ArgumentSemantic.Retain)]
UIViewController RearViewController { get; set; }

[Export ("setRearViewController:animated:")]
void SetRearViewController (UIViewController rearViewController, bool animated);

[Export ("rightViewController", ArgumentSemantic.Retain)]
UIViewController RightViewController { get; set; }

[Export ("setRightViewController:animated:")]
void SetRightViewController (UIViewController rightViewController, bool animated);

[Export ("frontViewController", ArgumentSemantic.Retain)]
UIViewController FrontViewController { get; set; }

[Export ("setFrontViewController:animated:")]
void SetFrontViewController (UIViewController frontViewController, bool animated);

[Export ("pushFrontViewController:animated:")]
void PushFrontViewController (UIViewController frontViewController, bool animated);

[Export ("frontViewPosition")]
FrontViewPosition FrontViewPosition { get; set; }

[Export ("setFrontViewPosition:animated:")]
void SetFrontViewPosition (FrontViewPosition frontViewPosition, bool animated);

[Export ("revealToggleAnimated:")]
void RevealToggleAnimated (bool animated);

[Export ("rightRevealToggleAnimated:")]
void RightRevealToggleAnimated (bool animated);

[Export ("revealToggle:")]
void RevealToggle (NSObject sender);

[Export ("rightRevealToggle:")]
void RightRevealToggle (NSObject sender);

[Export ("panGestureRecognizer")]
UIPanGestureRecognizer PanGestureRecognizer { get; }

[Export ("tapGestureRecognizer")]
UITapGestureRecognizer TapGestureRecognizer { get; }

[Export ("rearViewRevealWidth")]
float RearViewRevealWidth { get; set; }

[Export ("rightViewRevealWidth")]
float RightViewRevealWidth { get; set; }

[Export ("rearViewRevealOverdraw")]
float RearViewRevealOverdraw { get; set; }

[Export ("rightViewRevealOverdraw")]
float RightViewRevealOverdraw { get; set; }

[Export ("rearViewRevealDisplacement")]
float RearViewRevealDisplacement { get; set; }

[Export ("rightViewRevealDisplacement")]
float RightViewRevealDisplacement { get; set; }

[Export ("draggableBorderWidth")]
float DraggableBorderWidth { get; set; }

[Export ("bounceBackOnOverdraw")]
bool BounceBackOnOverdraw { get; set; }

[Export ("bounceBackOnLeftOverdraw")]
bool BounceBackOnLeftOverdraw { get; set; }

[Export ("stableDragOnOverdraw")]
bool StableDragOnOverdraw { get; set; }

[Export ("stableDragOnLeftOverdraw")]
bool StableDragOnLeftOverdraw { get; set; }

[Export ("presentFrontViewHierarchically")]
bool PresentFrontViewHierarchically { get; set; }

[Export ("quickFlickVelocity")]
float QuickFlickVelocity { get; set; }

[Export ("toggleAnimationDuration")]
double ToggleAnimationDuration { get; set; }

[Export ("replaceViewAnimationDuration")]
double ReplaceViewAnimationDuration { get; set; }

[Export ("frontViewShadowRadius")]
float FrontViewShadowRadius { get; set; }

[Export ("frontViewShadowOffset", ArgumentSemantic.Assign)]
SizeF FrontViewShadowOffset { get; set; }

[Export ("frontViewShadowOpacity")]
float FrontViewShadowOpacity { get; set; }

[Export ("delegate", ArgumentSemantic.Assign)]
SWRevealViewControllerDelegate Delegate { get; set; }
}

[Model, BaseType (typeof (NSObject))]
public partial interface SWRevealViewControllerDelegate
{
[Export ("revealController:willMoveToPosition:")]
void WillMoveToPosition (SWRevealViewController revealController, FrontViewPosition position);

[Export ("revealController:didMoveToPosition:")]
void DidMoveToPosition (SWRevealViewController revealController, FrontViewPosition position);

[Export ("revealController:animateToPosition:")]
void AnimateToPosition (SWRevealViewController revealController, FrontViewPosition position);

[Export ("revealControllerPanGestureShouldBegin:")]
bool PanGestureShouldBegin (SWRevealViewController revealController);

[Export ("revealControllerTapGestureShouldBegin:")]
bool TapGestureShouldBegin (SWRevealViewController revealController);

[Export ("revealControllerPanGestureBegan:")]
void PanGestureBegan (SWRevealViewController revealController);

[Export ("revealControllerPanGestureEnded:")]
void PanGestureEnded (SWRevealViewController revealController);

[Export ("revealController:panGestureBeganFromLocation:progress:")]
void PanGestureBeganFromLocation (SWRevealViewController revealController, float location, float progress);

[Export ("revealController:panGestureMovedToLocation:progress:")]
void PanGestureMovedToLocation (SWRevealViewController revealController, float location, float progress);

[Export ("revealController:panGestureEndedToLocation:progress:")]
void PanGestureEndedToLocation (SWRevealViewController revealController, float location, float progress);

[Export ("revealController:willAddViewController:forOperation:animated:")]
void WillAddViewController (SWRevealViewController revealController, UIViewController viewController, SWRevealControllerOperation operation, bool animated);

[Export ("revealController:didAddViewController:forOperation:animated:")]
void DidAddViewController (SWRevealViewController revealController, UIViewController viewController, SWRevealControllerOperation operation, bool animated);

[Export ("revealController:animationControllerForOperation:fromViewController:toViewController:")]
UIViewControllerAnimatedTransitioning AnimationControllerForOperation (SWRevealViewController revealController, SWRevealControllerOperation operation, UIViewController fromVC, UIViewController toVC);
}

[Category, BaseType (typeof (UIViewController))]
public partial interface SWRevealViewController_UIViewController
{
[Export ("revealViewController")]
SWRevealViewController RevealViewController ();
}

public delegate void SegueCallback(SWRevealViewControllerSegueSetController segue, UIViewController svc, UIViewController dvc);

[BaseType (typeof (UIStoryboardSegue))]
public partial interface SWRevealViewControllerSegueSetController
{
[Export ("performBlock", ArgumentSemantic.Retain)]
SegueCallback PerformDelegate { get; set; }
}

}
37 changes: 37 additions & 0 deletions SWRevealViewController/SWRevealViewController.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0-ios</TargetFramework>
<RootNamespace>SWRevealViewController</RootNamespace>
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<IsBindingProject>true</IsBindingProject>

<!-- Nuget package -->
<PackageId>com.jonathanantoine.SWRevealViewController</PackageId>
<Version>1.0.0.1</Version>
<Authors>Jonathan Antoine</Authors>
<Title>SWRevealViewController for dotnet</Title>
<PackageProjectUrl>https://github.com/jonathanantoine/SWRevealViewController-dotnet</PackageProjectUrl>
<Description>SWRevealViewController binding for Net 9.0 iOS</Description>
<PackageReleaseNotes>SWRevealViewController binding for Net 9.0 iOS</PackageReleaseNotes>
<PackageTags>maui ios SWRevealViewController dotnet</PackageTags>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup>
<ObjcBindingApiDefinition Include="ApiDefinition.cs"/>
<ObjcBindingCoreSource Include="StructsAndEnums.cs"/>
<None Include="..\.github\workflows\create-nuget.yml"/>
<None Include="..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>
<ItemGroup>
<NativeReference Include="SWRevealViewControllerSDK.a">
<Kind>Static</Kind>
<Frameworks>Foundation</Frameworks>
<SmartLink>True</SmartLink>
<ForceLoad>True</ForceLoad>
<LinkerFlags>-ObjC -fobjc-arc</LinkerFlags>
</NativeReference>
</ItemGroup>

</Project>
Binary file not shown.
24 changes: 24 additions & 0 deletions SWRevealViewController/StructsAndEnums.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;
using CoreGraphics;
using Foundation;
using ObjCRuntime;
using UIKit;

namespace SWRevealViewControllerMaui {

Copy link

Copilot AI Apr 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] This file currently does not define any structs or enums. If it is intended as a placeholder, consider adding a comment to clarify its purpose.

Suggested change
// This file is a placeholder for struct and enum definitions.

Copilot uses AI. Check for mistakes.
public enum FrontViewPosition {
LeftSideMostRemoved,
LeftSideMost,
LeftSide,
Left,
Right,
RightMost,
RightMostRemoved
}

public enum SWRevealControllerOperation {
ReplaceRearController,
ReplaceFrontController,
ReplaceRightController
}
}