如何调用viewController的方法在子视图中显示新内容? (IOS)

时间:2014-06-04 05:51:30

标签: ios objective-c

我正在关注本教程http://guti.in/articles/creating-tinder-like-animations/,但我很难搞清楚:

更新:

如何向左或向右通知拖动项目以告诉视图控制器显示新内容,如何根据拖动视图中的视图调用视图控制器中的方法?它们是两个独立的文件viewController.m和这一个......

我怎么说基于这个动作 GGDraggableView.m

#import "GGDraggableView.h"
#import "GGOverlayView.h"

@interface GGDraggableView ()
@property(nonatomic, strong) UIPanGestureRecognizer *panGestureRecognizer;
@property(nonatomic) CGPoint originalPoint;
@property(nonatomic, strong) GGOverlayView *overlayView;
@end

@implementation GGDraggableView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (!self) return nil;

    self.panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragged:)];
    [self addGestureRecognizer:self.panGestureRecognizer];

    self.overlayView = [[GGOverlayView alloc] initWithFrame:self.bounds];
    self.overlayView.alpha = 0;
    [self addSubview:self.overlayView];

    return self;
}



- (void)dragged:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGFloat xDistance = [gestureRecognizer translationInView:self].x;
    CGFloat yDistance = [gestureRecognizer translationInView:self].y;

    switch (gestureRecognizer.state) {
        case UIGestureRecognizerStateBegan:{
            self.originalPoint = self.center;
            break;
        };
        case UIGestureRecognizerStateChanged:{
            CGFloat rotationStrength = MIN(xDistance / 320, 1);
            CGFloat rotationAngel = (CGFloat) (2*M_PI/16 * rotationStrength);
            CGFloat scaleStrength = 1 - fabsf(rotationStrength) / 4;
            CGFloat scale = MAX(scaleStrength, 0.93);
            CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel);
            CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale);
            self.transform = scaleTransform;
            self.center = CGPointMake(self.originalPoint.x + xDistance, self.originalPoint.y + yDistance);

            [self updateOverlay:xDistance];

            break;
        };
        case UIGestureRecognizerStateEnded: {
            [self resetViewPositionAndTransformations];
            break;
        };
        case UIGestureRecognizerStatePossible:break;
        case UIGestureRecognizerStateCancelled:break;
        case UIGestureRecognizerStateFailed:break;
    }
}

我当前调用方法的方式是这样的,但我觉得像alloc,init一个新的控制器不正确,因为这是视图控制器中的一个视图:

这是我在GGDraggableView.m文件中的尝试:

RandomViewController *rVC = [[RandomViewController alloc]init];
            [rVC displayNewInfo];

2 个答案:

答案 0 :(得分:1)

道歉我对上一次回复犯了大错。

您要在此处使用的是委托,以便更新您的ViewController。

<强> GCDraggableView.h

@protocol GCDraggableViewDelegate <NSObject>

-(void)GCDraggableView:(id)draggableView dragged:(UIPanGestureRecognizer*) gestureRecognizer;

@end

@interface GGDraggableView ()
    @property (weak) id<GCDraggableViewDelegate> delegate;
@end

<强> GCDraggableView.m

- (void)dragged:(UIPanGestureRecognizer *)gestureRecognizer
{
    //Call protocol method on delegate in order to update ViewController
    [self.delegate GCDraggableView:self dragged:gestureRecognizer];
}

<强> ViewController.m

-(void)viewDidLoad
{
     GCDraggableView *subview.delegate = self;
}

-(void)GCDraggableView:(id)draggableView dragged:(UIPanGestureRecognizer*) gestureRecognizer
{
    //Whatever you want done when your subview is panned
}

答案 1 :(得分:0)

您无法在视图内使用viewcontroller的属性。因此,如果要将图像添加到imageview中,则应在GGDraggableView内为该imageview创建memebr变量。将此GGDraggableView添加到viewDidLoad中的viewcontroller.view或通过XIB / storyboard。现在将图像分配给imageView,方法如gdraggbleview.imageview.image = pics[0];