2015-04-20 6 views
0

Я использую 3-й библиотеку партии, где он работает, когда пользователь панорамирует вид (использует UIPanGestureRecognizer)программно создать пользовательский интерфейс Pan Жест

Однако я хочу, чтобы вызвать этот метод кнопки. Поэтому, как я могу сделать hardcode panning в моем коде, поэтому мне не нужно редактировать 3rd party library.

Другими словами, как я программно создаю UIPanGesture?

Я надеюсь, что мой вопрос ясен, и кто-нибудь может мне помочь здесь.

код из 3-сторонней библиотеки:

- (void)vPannedHorizontally:(UIPanGestureRecognizer*)gesture 

{ 

    ... 

} 

Кнопка Нажмите событие из моей ViewCOntroller:

-(IBAction)clickedNow:(id)sender{ 



ThirdPartyLib *tpl =[[ThirdPartyLib alloc]init]; 

[tpl vPannedHorizontally: ??????]; // I need to hardcode a UIPanGesture so it works. 

} 

UPDATE

#import "ContentViewController.h" 
#import "PaperFoldView.h" 

@interface ContentViewController() 
@property (nonatomic, retain) PaperFoldView *paperFoldView; 

@end 
@implementation ContentViewController 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] 
             initWithTitle:@"Flip" 
             style:UIBarButtonItemStyleBordered 
             target:self 
             action:@selector(flipView:)]; 
     self.navigationItem.leftBarButtonItem = flipButton; 
    } 
    return self; 
} 

-(void)flipView:(id)sender{ 
    NSLog(@"Hi"); 
    [self.paperFoldView setPaperFoldState:PaperFoldStateLeftUnfolded animated:YES]; 
} 
+0

Ну, сторонняя библиотека должна иметь обратный вызов для событий панорамирования. Вы можете попробовать вызвать 'performSelector: @selector (theirCallback :) withObject: yourGestureReco', где' yourGestureReco' является экземпляром 'UIPangGestureRecognizer', где вы задаете все параметры (состояние, перевод, ...). Разве это не вариант? – Majster

+0

Можете ли вы показать мне подробный пример? – Illep

ответ

0

Каждый жест распознаватель получает метод обратного вызова, к которому они отвечают когда что-то происходит с ними (смена состояния, ...). Поэтому ваша сторонняя библиотека должна иметь обратный вызов. По обратному обращению я имею в виду [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panCallback:)], и в этом случае - (void)panCallback:(UIPanGestureRecognizer *)sender получит вызов того, кто создал экземпляр распознавателя.

Что вы хотите сделать, это узнать имя обратного вызова в вашей сторонней библиотеке. Затем создайте UIPanGestureRecognizer, на котором вы установите все необходимые вещи, такие как перевод.

UIPanGestureRecognizer *reco = UIPanGestureRecnogizer.new; 
[reco setTranslation:CGPointMake(20, 20) inView:self.view]; //Or whatever you want 
//reco.state = UIGestureRecognizerStateChanged; //If you want this too you'll have to subclass it 

//Now call the callback and pass your gesture recognizer 
[my3rdLibraryClassInstance performSelector:@selector(panCallback:) withObject:reco]; 

Надеюсь, это немного облегчит ситуацию.

EDIT: Что касается библиотеки Fold, я заметил, что есть некоторые методы, которые вы, вероятно, можете использовать для складывания вручную.

  1. Установите направление, установив свойство paperFoldInitialPanDirection
  2. вызова animateWithContentOffset:(CGPoint)point panned:(BOOL)panned на кратном зрения и установить точку надлежащим образом

Играть немного с параметрами. Я не уверен, что это сработает, но я думаю, что это должно (я просто быстро увидел реализацию). Сообщите, что произойдет, когда вы попробуете.

EDIT 2: окончательное решение

Если вы хотите, чтобы открыть окно библиотеки уже предоставляет методы, чтобы сделать это. Просто позвоните

[self.paperFoldView setPaperFoldState:PaperFoldStateLeftUnfolded animated:YES]; 

Это было протестировано с включенным демонстрационным проектом. И вы сделали.

+0

По-прежнему не работает. Я использую библиотеку 'https: // github.com/honcheng/PaperFold-for-iOS'. Мне нужно, чтобы страница сбрасывалась для нажатия кнопки, а не 'panning' – Illep

+0

Я отредактировал ответ, попробуйте. – Majster

+0

Я все еще застрял. Я попытался установить 'paperFoldInitialPanDirection' в' PaperFoldInitialPanDirectionHorizontal', а также 'animateWithContentOffset: CGPointMake (5.0,5.0) panned: YES', но он все равно не работает. Помогите. – Illep

0

Я не думаю, что вам нужно имитировать жест для этого.

Вызовите методы на PaperFoldView, чтобы вручную складывать/разворачивать.

-(IBAction)open:(id)sender 
{ 
    //For some reason the timerStepDuration is set to 0 by default so you need to set this otherwise there won't be an animation. 
    self.paperFoldView.timerStepDuration = 0.02; 
    [self.paperFoldView setPaperFoldState:PaperFoldStateLeftUnfolded]; 
} 
-(IBAction)close:(id)sender 
{ 
    //For some reason the timerStepDuration is set to 0 by default so you need to set this otherwise there won't be an animation. 
    self.paperFoldView.timerStepDuration = 0.02; 
    [self.paperFoldView setPaperFoldState:PaperFoldStateDefault]; 
} 
+0

После установки 'setPaperFoldState', что еще я должен делать. Поскольку в настоящее время представление не отображается или не отображается. – Illep

+0

Я пробовал ваше решение, но боковая панель не появляется. Помогите – Illep

Смежные вопросы