在ios中,CAlayer Setcontents方法采用单个图像。我有一个方法可以改变触摸事件的图像

时间:2013-08-31 10:13:31

标签: ios objective-c calayer

CALayer *featureLayer = nil;
[featureLayer setContents:(id)[square CGImage]];

我需要在数组图像内部改变'方形'。

- (void)viewDidLoad
{
    [super viewDidLoad];
images = [[NSArray alloc] initWithObjects:
              [UIImage imageNamed:@"ic copy2"],
              [UIImage imageNamed:@"bubble 1"],
              [UIImage imageNamed:@"bubble 2"],
              [UIImage imageNamed:@"bubble 3"],
              [UIImage imageNamed:@"bubble 4"],
              nil];
square=[images objectAtIndex:0];
//some code....}

这是在触摸事件上更改图像的方法。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
      NSLog(@"'Touches Began");

    if ([touch view] == previewView) {
        square = [images objectAtIndex:1];
        NSLog(@"Image touched and changed");
    }

    currentImage++;
    NSLog(@"Touch Count = %d", currentImage);
    if (currentImage == [images count])
        currentImage = 0;

    square= [images objectAtIndex:currentImage];



}

由于Setcontents制作图像的静态副本,因此uiview中的图像不会发生变化。是否有任何方法可以从图像阵列中更改触摸上的addcontent图像。?

1 个答案:

答案 0 :(得分:0)

你似乎有点误解了指针。

首次分配时contents = square contents是指针地址的副本(不是对象副本)。这意味着稍后更改square的地址也不会修改contents。它们是独立的指针,即使它们指向相同的地址。修改contents指针后,需要重新分配square指针。

square = [images objectAtIndex:currentImage];
[featureLayer setContents:(id)[square CGImage]];